一. 设置一个parent项目,parent项目的作用应该有如下方面:
1.统一管理jar包的版本,这样许多子项目只需指定依赖的jar,而无需指定所依赖jar的版本
(1)在<properties>标签内部指定版本常量,例如
<properties>
<spring.webflow.version>2.3.2.RELEASE</spring.webflow.version
</properties>
(2)引用maven本身提供的常量,如project.version,引用方式${project.version},这个方式多用于在一个多项目环境下,各子项目之间定义依赖时使用。
(3)通过在父项目上的<dependencyManagement>标签为子项目提供一个可选的依赖库,子项目指用其中的jar时无需指定版本
(4)通过在父项目上的<dependencies>强行为子项目指定一些必要的jar
(5) 子项目继承父项目时无需指定版本,这样子项目将继承父项目的版本,这样一来结合上述(2)的设置,父项目就可以通过升级自己的版本而带动整个子项目版本的升级,且不会影响子项目之间的依赖。
2. 在父项目的配置中使用<modules>标签用来聚合管理各个子项目,比如如果想对项目进行打包,就只需在父项目上进行一次mvn install操作,会自动把<modules>标签上指定的全部子项目都执行一次mvn install 。
二. 使用私服,如安装nexus,但要注意,如果私服的访问不仅仅局限于局域网,则需要进行设置,屏蔽掉anonymous用户的访问。使用私服后,不同的开发人员只需通过版本服务器下自己要开发的项目,其他项目通过maven访问私服获取。
三. 使用各类maven插件,对项目进行特定的管理,这也是maven的特性,maven本身的架构是一个微内核架构,各类功能主要是靠插件来完成,所以要用好maven,就必须掌握一些常用的插件的使用。
四. 当多项目中某个jar包升级并发布到了nuexus私服上,如何通知其他项目进行更新,在这里可以利用maven的SNAPSHOT版本机制,,每次更改后,都mvn deploy到nexus中,每次deploy,maven都会将SNAPSHOT改成一个当前时间的timestamp,比如B-1.0-SNAPSHOT.jar到nexus中后,会成为这个样子:B-1.0-20081017-020325-13.jar。Maven在处理A中对于B的SNAPSHOT依赖时,会根据这样的timestamp下载最新的jar,默认Maven每天 更新一次,如果你想让Maven强制更新,可以使用-U参数,如:mvn clean install -U
五.项目发布私服
1.修改settings.xml文件
... <servers> <server> <id>maven-releases</id> <username>admin</username> <password>admin123</password> </server> <server> <id>maven-snapshots</id> <username>admin</username> <password>admin123</password> </server> </servers> ...
2.在顶级父项目中配置pom文件
//设置发布的服务器 <distributionManagement> <repository> <id>maven-snapshots</id> <name>Nexus ReleaseRepository</name> <url>http://117.50.82.227:8081/repository/maven-snapshots/</url> </repository> </distributionManagement>
//设置私服仓库,用于项目依赖 <repositories> <repository> <id>nexus</id> <url>http://117.50.82.227:8081/repository/maven-public/</url> </repository> </repositories>
//设置源码打包插件 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>3.0.1</version> <executions> <execution> <!-- 绑定source插件到Maven的生命周期 --> <phase>compile</phase> <!--在生命周期后执行绑定的source插件的goals --> <goals> <goal>jar-no-fork</goal> </goals> </execution> </executions> </plugin>
3.执行命令发布
mvn deploy -DskipTests=true