Maven Java EE和模块项目pom

Raj*_*dra 2 maven-2 maven

我是maven的新手.

我有一个Java EE Web项目和一个模型项目,Web项目依赖于模型,因为模块有一些标准的类,需要在web中使用jar.

网络需要模型jar文件.

我怎么能写出一个依赖另一个项目的2个项目?

给我一个项目pom的样本编码.

Pas*_*ent 5

典型的maven多模块项目结构将涉及3个模块:聚合父模块(允许在所有模块上启动多模块构建),模型模块和Web模块.像这样的东西:

.
??? mymodule
?   ??? pom.xml
?   ??? src
?       ??? main
?       ?   ??? java
?       ?   ??? resources
?       ??? test
?           ??? java
?           ??? resources
??? mywebapp
?   ??? pom.xml
?   ??? src
?       ??? main
?           ??? resources
?           ??? webapp
?               ??? index.jsp
?               ??? WEB-INF
?                   ??? web.xml
??? pom.xml

父母pom.xml(在根)的位置如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.stackoverflow</groupId>
  <artifactId>Q4176120</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>Q4176120 - Parent POM</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    ...
  </dependencies>
  <modules>
    <module>mywebapp</module>
    <module>mymodule</module>
  </modules>
</project>
Run Code Online (Sandbox Code Playgroud)

mymodule/pom.xml将是一个普通的POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <artifactId>Q4176120</artifactId>
    <groupId>com.stackoverflow</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <!--groupId>com.stackoverflow</groupId--> <!-- inherited -->
  <artifactId>mymodule</artifactId>
  <packaging>jar</packaging>
  <name>Q4176120 - Module</name>
  <dependencies>
    ...
  </dependencies>
</project>
Run Code Online (Sandbox Code Playgroud)

而且mywebapp/pom.xml将宣布对MyModule的神器的依赖:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <artifactId>Q4176120</artifactId>
    <groupId>com.stackoverflow</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <!--groupId>com.stackoverflow</groupId--> <!-- inherited -->
  <artifactId>mywebapp</artifactId>
  <packaging>war</packaging>
  <name>Q4176120 - Maven Webapp</name>
  <dependencies>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>mymodule</artifactId>
      <version>${project.version}</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>Q4176120</finalName>
  </build>
</project>
Run Code Online (Sandbox Code Playgroud)

使用此结构,您可以从父目录启动多模块构建,即在所有模块上运行目标(并且maven将计算正确的构建顺序):

$ mvn install
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] Q4176120 Parent POM
[INFO] Q4176120 Module
[INFO] Q4176120 Maven Webapp
[INFO]                                                                         
...

请注意,我还在上面的示例中使用了继承(mymodule并从元素中声明的父级mywebapp 继承<parent>),以便我可以对父POM中的公共部分进行分组,避免重复.这不是强制性的,您可以使用聚合而不继承,但这非常方便,聚合和继承通常在实践中结合在一起.

资源