Maven 2项目

我有2个项目

  1. 执行CRUD操作的Sever侧项目。 (让我们说P1)
  2. 客户端JSF表示层java web项目。 (P2)

由于P2将依赖于P1中的所有实体,因此我将P1包含在P2的构建路径中。 (不是通过maven)

每次我对P1进行更改时,我都必须导出一个jar并将其放在Tomcat webapp文件夹中,否则我会抛出NoClassDef。

这可以自动化吗?

您可以构建一个main Maven项目,该项目有三个子模块,比如masterplatformparent

(注意:对于以下所有项目,您应该将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项目的依赖项。

这种方法有许多优点:

  1. 您可以将更多项目添加到列表中并自动编译它们而不必担心放置jar(每个新项目必须将parent作为父项)
  2. 使用像jenkins这样的CI工具,可以更轻松地自动化流程,从而控制编译过程
  3. 将依赖关系版本集中在层次结构的顶部,并根据需要专注于子项目