[Maven进阶详解@]

 Maven是Apachge(一个开源社区Or一款负载均衡开源服务器的名称)


用Maven必须系统环境变量M2_HOME指定Maven仓库的根目录.(可自定义但要言简意赅MAVEN_HOME等也行)
如果出现这种错解决-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment, variable and mvn script match.
参考这个网址.http://www.cnblogs.com/sprinng/p/5141233.html


请一定要配置环境变量



1.Maven项目模型:在每个项目模型里的ClassPath下有一个pom.xml的坐标文件,
记录Jar包的位置,本工程的坐标,打包的运行方式(pom,war,jar).第三方插件的配置(tomcat7,JDK编译版本等)


2.依赖管理模型(基础核心):统一组件版本号(一般都是在pom父工程里配置),添加依赖关系(继承,聚合).对Jar包结构的操作都称之为依赖管理.
 
3.项目生命周期:清理,初始化,编译,测试,报告,打包,部署,站点的生成.
管理Maven生命周期的过程都是基于插件完成.Maven命令行来操作.
三个阶段 的生命周期: 是有顺序.顺序依赖.


clean :  (清理target下的文件一些class和一些资源文件)准备清理,[清理]上一次构建的target下文件,清理善后


default:定义了真正构建时所需要执行的所有步骤,它是生命周期中最核心的部分
  process-sources: 处理项目主资源文件。一般来说,是对src/main/resources目录的内容进行变量替换等工作后,复制到项目输出的主classpath目录中
  compile: 编译项目的主源码。一般来说,是编译src/main/java目录下的Java文件至项目输出的主classpath目录中
  process-test-sources: 处理项目测试资源文件。一般来说,是对src/test/resources目录的内容进行变量替换等工作后,复制到项目输出的测试classpath目录中
  install: 将包安装到Maven本地仓库,供本地其他Maven项目使用
  deploy: 将最终的包复制到远程仓库,供其他开发人员和Maven项目使用

部署详解:http://www.cnblogs.com/luffigo/p/5224707.html


这个环节就是把  Maven的生成生产目录, 资源拷贝,编译源码,编译运行测试代码,install,打包.





site :
pre-site:准备生成站点
site:生成站点及文档
post-site:站点收尾
site-deploy:将生成的站点发布到服务器上


4.Maven定义一套标准的结构:
 Maven项目/src(java源码) Or target(编译好的class,打包结果)Or pom.xml/Main(java代码)OrTest(test代码)
/Java源代码目录 Or Java配置文件.xml目录 Or webapp(前端代码目录)
Test目录的所有资源文件都不会打包到Jar,War里
每个Maven仓库的目录格式的都是一样/的


Maven仓库形式:Maven是管理jar包仓库的,软件本身没有jar包需要仓库


1.中央仓库【唯一】,包含着很多的第三方jar包,如果在有网络时配置的pom文件的jar坐标会被下载到本地仓库。
2.私服;自己的搭建的在局域网内部的Maven服务器。
3.本地仓库


Maven环境搭建;
在Apachge网站下载Maven,
Maven目录重点
bin:命令
conf:配置文件。
lib:依赖jar包


1.让Maven找到本地仓库的位置:在Conf目录下的Settings.xml
<localRepository>本地仓库绝对路径<localRepository>这个Maven软件就有了可以管理的仓库


2在开发工具中配置maven地址
在Windiw的配置搜索栏选择Maven点Installactions视图配置,
点击Add按钮,在Installactions home中找到本机的Maven地址的绝对路径。
完成后点击Apply保存操作;


3.在Windiw的配置搜索栏选择Maven点User Settings 视图配置Settings.xml文件目录
配置选择框 User Settings (open file ) 选中conf\Settings.xml文件
完成后点击Apply保存操作;


配置Maven视图:(显示Maven仓库的目录,这个视图可以找到有木有这个jar,) 
Window==》show View ==》Maven Repository==》保存==》到多视图栏,找到Maven Repository,右点Local  Repository ==》Rebuild Index(重建索引)==>提示框OK


创建一个Maven Project 
  
Artifact Id : 系统的模块ID 
版本号
Pakeging :打包类型


设置编译版本:1.8
<plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.2</version>
      <!-- 详细信息配置 JDK版本 -->
      <configuration>
      <source>1.8</source>
      <target>1.8</target>
      </configuration>
 </plugin>
插件的配置根标签都是<configuration>


 在搭建pom项目对象模型时,如果项目出错了随时Maven  Updata Poject 更新


本地Maven如果没有依赖Jar包,会联网远程下载
本地Maven如果没有依赖插件, 不会联网远程下载.:插件的配置根标签都是<configuration>


http://mvnrepository.com/  :用与Maven坐标生成,选择一个jar包自动生成Pom坐标配置.




创建一个完整的war工程;是没有前端目录webapp/WEB-INF/web.xml,这都需要自己手动创建
在Maven Start 时要用Tomcat ,用Maven的Tomcat插件,在版本号后指定1.端口信息.指定2.访问路径.


项目包名结构分析:
域名倒序:cn.hdmbs一级域名(顶级   你 域名)
 cn.hdmbs.Mavenweb:二级域名模块




Maven Pom.xml 定义变量,规范版本号.经常在Pom的主工程来指定主版本号,
所有的标签自定义的数值都可以用自定义变量来统一管理.


定义一个<properties>标签包裹代表jar包称的自定义标签
版本号变量控制
<properties>
  servlet-api.version这个标签就相当于一个变量他代表2.5这个值
    <servlet-api.version>2.5</servlet-api.version>
 </properties>  
    


伪代码 
<jar>
//相当于引用一个2.5的变量
{servlet-api.version}</version>
</jar>
Maven锁定版本:
父工程指定版本需要标签:<properties>,和子项目定义jar包方法一样.
可以在pom父工程指定版本(和上述的方法一样),子工程不指定版本,默认使用父工程的版本.不要引用.不指定.
如果指定则使用子工程的版本.






一个Maven工程可以有多个不同规格的(pom,war,jar,ejb)工程


Maven [聚合]依赖管理结构:


有一个pom的主工程,包括这几个模块工程,
模块工程是独立的有自己的src target webapp pom


Maven [继承]依赖管理结构:
在父工程添加依赖子工程就继承了依赖




War包打包会把Jar项目打成lib包下的Jar包,当对父工程打包时一个子模块工程报错,打包提前结束.
Maven打包时不包括测试代码和依赖范围为Test,provided  的jar包.(junit)


Jar项目的classpath是不配置框架的配置文件,只在本项目的War项目classpath配置
如果要在Jar包里读取配置文件就要配置【classpath*】加星
applicationContext.xml改为classpath*:applicationContext-*.xml 
这么写也是一样的效果:classpath*:/applicationContext-*.xml 


依赖范围管理:
大部分Jar包依赖但是complie
complie在编译,测试,运行都有效


Test  依赖范围 只用来测试 :测试有效 :编译,打包(运行)时无效


provided  [重点]依赖范围  编译,测试  打包(运行)时无效,
有些tomcat(服务器)有(jar包)的运行环境就用provided,我们的程序在运行时依赖tomcat的运行环境
这样可以避免和tomcat冲突。


JDBC 依赖环境:测试,运行都有效
  


Maven 依赖传递 :
如果你加入一个core 包,会把所有依赖的包都导入进来.


Maven排除依赖:
如果 Maven依赖jar包出现两个相同jar包.必须要排除一个,不然会出现麻烦.
在需要大量依赖传递的core包pom.xml坐标里把多余的依赖给排除.
<exclusions>
     <exclusion>
     <groupId>   组名                 </groupId>
      <artifactId>项目名称<artifactId> 
       
排除项目的三个坐标
    </exclusion>
</exclusions>
















<!--本地Maven仓库服务 :SSH相关配置-->
  <!-- <localRepository>C:\repository</localRepository>-->
 
  <!--本地Maven仓库服务 :SSM相关配置-->
  <!-- <localRepository>C:\.m2\repository</localRepository>-->
 
  <!--当前使用:如果使用远程仓库不需要指定仓库默认User\用户名\.m2\repository,可以指定本地仓库下载位置-->
 <localRepository>C:\.m2\repository</localRepository>
  
  
  <!--阿里云中央Maven云服务
  <mirrors>
    
  <mirror>  
      <id>nexus</id>  
      <name>AliyunMaven</name>  
      <mirrorOf>*</mirrorOf>        
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>  
    </mirror>  


  </mirrors>-->
发布了29 篇原创文章 · 获赞 9 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_37977176/article/details/78158287