我是maven的新手。
我有一个Java EE Web项目和一个模型项目,web项目依赖于模型,因为模块有一些标准的类,需要在web中使用jar。
web需要模型jar文件。
我如何编写一个依赖另一个项目的2个项目?
给我一个关于项目pom的示例编码。
答案 0 :(得分: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>
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工件的依赖:
<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
继承来自{{ 1}}元素)这样我就可以在父POM中对公共部分进行分组,避免重复。这不是强制性的,您可以使用聚合而不继承,但这非常方便,聚合和继承通常在实践中结合在一起。
答案 1 :(得分:0)
您创建了2个maven项目:Web项目和jar项目。 Web项目将取决于模型项目。因此,您将在Web项目pom.xml中添加模型项目作为依赖项
我建议你在这里阅读maven基础知识:http://www.sonatype.com/books/maven-book/
您的模型项目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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.abc</groupId>
<artifactId>>model-module</artifactId>
<name>My Model Module</name>
<packaging>jar</packaging>
<version>1.0.0-SNAPSHOT</version>
您的网络应用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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.abc</groupId>
<artifactId>>my-web-app</artifactId>
<name>My First Web Application</name>
<packaging>war</packaging>
<version>1.0.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.abc</groupId>
<artifactId>model-module</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>