一、pom.xml常用配置详解
1、<modelVersion>4.0.0</modelVersion> 与超级pom.xml的版本一致
2、groupId 公司域名的倒写
3、artifactId 功能名称
4、version 版本号
5、packaging 打包的格式,默认jar 可选项:war 、maven-plugin
6、properties 项目属性配置,一般设置公用的配置信息
7、dependencyManagement
1)只出现在父pom中
2)统一版本号
3)声明
8、dependency 依赖
1)下面经常会设置groupId 、artifactId 、version
2)type 默认为jar
3)scope 默认值为compile(1、什么时候用 2、会打到jar包里面去吗)
a)compile 编译 大多数都是compile类型
b)test 测试 例如:junit
c)provided 编译但是不会打包 例如:servlet-api包,一般情况下tomcat下会有servlet-api的jar包,
但是编译的时候很多时候需要引入该包,否则编译会报错
d)runtime 运行时 ,编译的时候可以不使用但是会打到jar包中,例如:mysql的驱动jar 至少jdbc的实现,运行时才会使用
e)system 本地的一些jar包,不在中央仓库中,一般是自己写的一些jar,但是鉴于放到中央仓库,方便项目复用。
一般自己写的jar想引入项目:1、放到私服中 2、install到本地仓库 3、classPath方式
4、scope设置为system,并且设置systemPath即classPath的地址
4)exclusions 排除包 例如:常用的就是spring核心包中的日志框架,一般不使用
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
二、依赖传递
1、依赖传递性,比如子pom可以引用父pom。
2、scope的依赖传递
3)依赖仲裁
a)最短路径原则 由下往上进行查找,路径最短,
i)在项目中需要知道自己的jar包依赖关系,
运行命令,mvn dependency:tree >dependency_tree.txt 则会在项目目录下生成依赖关系文件,也是发生冲突的很好的查找方式
ii)若想修改父pom的version信息,下面的子pom文件又会比较多(没有全局修改器),可引入插件,执行命令
mvn versions:set -Dnewversion=1.1-SHATSHOT
<build>
<outputDirectory>${project.basedir}/src/main/webapp/WEB-INF/classes/</outputDirectory>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>version-maven-plugin</artifactId>
<version>2.3</version>
</plugin>
</plugins>
</build>
b)加载先后顺序原则(相通路径的情况下,则可以看一下pom中的书写顺序)
三、生命周期
1)生命周期包含三个部分:clean、default、site
2)每个生命周期(lifecyle)包含多个阶段(phase)
3)插件可以指定在生命周期的每个phase运行,并指定多个目标如下:
<!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
<!-- <executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classesDirectory>${project.outputDirectory}</classesDirectory>
<finalName>jeesite</finalName>
<outputDirectory>${project.build.directory}/${project.artifactId}/WEB-INF/lib</outputDirectory>
<includes>
<include>com/thinkgem/jeesite/**</include>
</includes>
</configuration>
</execution>
</executions> -->
</plugin>
四、版本控制
1、1.0SNAPSHOT 开发版本(与1.0.0-RELAESE稳定版本对应),若不清楚依赖的版本(可能跨部门,已经进行升级),解决方式
a)将本地仓库的repository 进行删除
b)mvn clean package -U (强行去远程拉取一次)
2、版本设置
1.0.0-RELEASE 分别为: 主版本号.次版本号.增量版本号-历程碑版本
五、Maven常用命令
maven命令执行的模块的顺序为:编写顺序和依赖关系的综合结果
1、compile 编译
2、clean 删除target目录
3、test 一般在不会下载该插件,但是运行的时候会再去下载
4、packaging 打包
5、install 把项目install到local repository
6、deploy 发本地jar包发布到remote