Maven 2项目
我有2个项目
- 执行CRUD操作的Sever侧项目。 (让我们说P1)
- 客户端JSF表示层java web项目。 (P2)
由于P2将依赖于P1中的所有实体,因此我将P1包含在P2的构建路径中。 (不是通过maven)
每次我对P1进行更改时,我都必须导出一个jar并将其放在Tomcat webapp文件夹中,否则我会抛出NoClassDef。
这可以自动化吗?
您可以构建一个main
Maven项目,该项目有三个子模块,比如master
, platform
和parent
。
(注意:对于以下所有项目,您应该将GAV参数与应用程序体系结构一致地设置,以便使重要名称易于理解)
main
项目只是Maven评估其他项目的顺序:
4.0.0 com.acme.projects main 0.0.1-SNAPSHOT pom UTF-8 .... master parent platform
master
pom包含要构建的项目列表及其顺序(也称为Reactor订单)
4.0.0 com.acme.projects master 0.0.1-SNAPSHOT pom ../../P1 ../../P2
正如您所见,P2必须在P1之后插入,因为P2具有P1作为依赖关系。
platform
pom包含有关您的平台的所有信息,如JDK版本,maven插件版本,编码等。
4.0.0 com.acme.projects platform 0.0.1-SNAPSHOT pom org.apache.maven.plugins maven-compiler-plugin 2.3.2 1.7 1.7 UTF-8 org.apache.maven.plugins maven-install-plugin 2.3.1 org.apache.maven.plugins maven-jarsigner-plugin 1.2 .....
parent
pom将平台pom作为父级,并包含有关您将在项目中使用的依赖项的所有全局GAV信息(Spring,CXF,junit,log4j等)
4.0.0 com.acme.projects platform 0.0.1-SNAPSHOT ../platform parent pom com.acme.projects UTF-8 4.1.6.RELEASE 3.0.4 4.12 log4j log4j 1.2.17 org.springframework spring-context ${spring.version} org.springframework spring-aop ${spring.version} org.springframework spring-tx ${spring.version} org.springframework spring-jdbc ${spring.version} org.springframework spring-context-support ${spring.version} org.springframework spring-test ${spring.version} test junit junit ${junit.version} test
最后,你将有一个这样的项目结构:
你必须在每个项目文件夹中放入正确的pom。 现在,P1和P2项目都必须将parent
项目作为父项目,而且P2必须具有P1的依赖项。
为了构建整个反应器,您只需将自己设置main
目录并使用该命令
mvn clean install
这将编译您的P1项目并使其可用作您的P2项目的依赖项。
这种方法有许多优点:
- 您可以将更多项目添加到列表中并自动编译它们而不必担心放置jar(每个新项目必须将
parent
作为父项) - 使用像jenkins这样的CI工具,可以更轻松地自动化流程,从而控制编译过程
- 将依赖关系版本集中在层次结构的顶部,并根据需要专注于子项目