我是 Maven 新手。
我有一个Java EE Web项目和一个模型项目,Web项目依赖于模型,因为模块有一些标准类需要在Web中jar。
web 需要模型 jar 文件。
我如何编写两个项目,其中一个项目依赖于另一个项目?
给我两个项目 pom 上的示例编码。
最佳答案
典型的 Maven 多模块项目结构将涉及 3 个模块:一个聚合父模块(允许在所有模块上启动多模块构建)、模型模块和网络模块。像这样的事情:
. ├── 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
Where the parent pom.xml
(at the root) would be like this:
<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>
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>
和mywebapp/pom.xml
将声明对 mymodule Artifact 的依赖关系:
<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>
通过这种结构,您可以从父目录启动多模块构建,即在所有模块上运行目标(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>
元素中声明的父级继承),因此我可以将公共(public)部分分组到父 POM 中并避免重复。这不是强制性的,您可以使用聚合而不使用继承,但这非常方便,并且聚合和继承在实践中经常结合在一起。
资源
关于maven-2 - Maven Java EE 和模块项目 pom,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4176120/