原文: https://howtodoinjava.com/maven/multi-module-project-eclipse/
了解如何在 Eclipse IDE 中创建多模块 Maven 项目。 在此 maven 教程中,我们将学习在 eclipse 中创建嵌套的 maven 项目。
1. 创建多模块 Maven 项目
让我们创建一个 maven 项目,其中包含 ear, war 和 jar 类型的模块。 我们正在创建企业应用的结构,其中应用将作为 EAR(企业应用获取)文件部署到应用服务器(例如 weblogic,websphere)。
该 EAR 将包含一个(或多个)WAR(Web 应用资源)文件,并且每个 war 将包含服务项目,该服务项目具有面向所有 war 文件的通用代码,打包类型为 JAR(Java ARchive)。

项目关系
1.1 创建父项目 - 打包类型为pom
在 Eclipse 中创建一个新的 Maven 项目。 将其包类型设置为pom。

创建 maven 项目

完整的 maven 组 id 和工件 id

将打包 jar 修改为 pom
1.2 创建 Maven 模块 - 包类型为EAR
在父项目中创建一个新的 Maven 模块。 将其包类型更改为'ear'。 该模块可以具有 maven EAR 插件,该插件最终将构建要在服务器上部署的 EAR 文件。

创建新的 maven 模块

添加模块名称

完成的原型详细信息
1.3 创建 Maven 模块 - 打包类型为war和jar
与 ear 模块类似,为 war 文件和 jar 服务文件再创建两个模块。 分别更改其包并添加 maven 插件。
1.4 最后结果
现在,在 eclipse 中观察最终的项目结构,并验证所有项目的pom.xml文件。
<?xml version="1.0" encoding="UTF-8"?><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.0http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.howtodoinjava.app</groupId><artifactId>HelloWorldApp</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging><name>HelloWorldApp</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><modules><module>web</module><module>service</module><module>ear</module></modules></project>
<?xml version="1.0"?><projectxsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><modelVersion>4.0.0</modelVersion><parent><groupId>com.howtodoinjava.app</groupId><artifactId>HelloWorldApp</artifactId><version>0.0.1-SNAPSHOT</version></parent><artifactId>ear</artifactId><name>ear</name><packaging>ear</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>com.howtodoinjava.app</groupId><artifactId>web</artifactId><version>0.0.1-SNAPSHOT</version><type>war</type></dependency></dependencies><build><pluginManagement><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-ear-plugin</artifactId><version>3.0.1</version><configuration><modules><webModule><groupId>com.howtodoinjava.app</groupId><artifactId>web</artifactId><uri>web-0.0.1-SNAPSHOT.war</uri><!-- Set custom context root --><contextRoot>/application</contextRoot></webModule></modules></configuration></plugin></plugins></pluginManagement></build></project>
<?xml version="1.0"?><projectxsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><modelVersion>4.0.0</modelVersion><parent><groupId>com.howtodoinjava.app</groupId><artifactId>HelloWorldApp</artifactId><version>0.0.1-SNAPSHOT</version></parent><groupId>com.howtodoinjava.app</groupId><artifactId>web</artifactId><version>0.0.1-SNAPSHOT</version><name>web</name><url>http://maven.apache.org</url><packaging>war</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>com.howtodoinjava.app</groupId><artifactId>service</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies></project>
<?xml version="1.0"?><projectxsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><modelVersion>4.0.0</modelVersion><parent><groupId>com.howtodoinjava.app</groupId><artifactId>HelloWorldApp</artifactId><version>0.0.1-SNAPSHOT</version></parent><groupId>com.howtodoinjava.app</groupId><artifactId>service</artifactId><version>0.0.1-SNAPSHOT</version><name>service</name><url>http://maven.apache.org</url><packaging>jar</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency></dependencies></project>
要生成项目,请从控制台运行$mvn clean install命令。
E:\devsetup\workspacetemp\HelloWorldApp>mvn clean install[INFO] Scanning for projects...[INFO] ------------------------------------------------------------------------[INFO] Reactor Build Order:[INFO][INFO] HelloWorldApp [pom][INFO] service [jar][INFO] web [war][INFO] ear [ear][INFO]......[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ service ---[WARNING] JAR will be empty - no content was marked for inclusion![INFO] Building jar: E:\devsetup\workspacetemp\HelloWorldApp\service\target\service-0.0.1-SNAPSHOT.jar[INFO]......[INFO] Packaging webapp[INFO] Assembling webapp [web] in [E:\devsetup\workspacetemp\HelloWorldApp\web\target\web-0.0.1-SNAPSHOT][INFO] Processing war project[INFO] Copying webapp resources [E:\devsetup\workspacetemp\HelloWorldApp\web\src\main\webapp][INFO] Webapp assembled in [47 msecs][INFO] Building war: E:\devsetup\workspacetemp\HelloWorldApp\web\target\web-0.0.1-SNAPSHOT.war[INFO] WEB-INF\web.xml already added, skipping[INFO]......[INFO][INFO] --- maven-ear-plugin:3.0.1:ear (default-ear) @ ear ---[INFO] Copying artifact [war:com.howtodoinjava.app:web:0.0.1-SNAPSHOT] to [web-0.0.1-SNAPSHOT.war][INFO] Copy ear sources to E:\devsetup\workspacetemp\HelloWorldApp\ear\target\ear-0.0.1-SNAPSHOT[INFO] Building jar: E:\devsetup\workspacetemp\HelloWorldApp\ear\target\ear-0.0.1-SNAPSHOT.ear[INFO][INFO] ------------------------------------------------------------------------[INFO] Reactor Summary:[INFO][INFO] HelloWorldApp 0.0.1-SNAPSHOT ....................... SUCCESS [ 0.328 s][INFO] service ............................................ SUCCESS [ 0.839 s][INFO] web ................................................ SUCCESS [ 0.838 s][INFO] ear 0.0.1-SNAPSHOT ................................. SUCCESS [ 0.588 s][INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 2.749 s[INFO] Finished at: 2018-11-18T15:04:52+05:30[INFO] ------------------------------------------------------------------------
构建会生成名称为ear-0.0.1-SNAPSHOT.ear的 ear 文件。 可以根据需要随意更改项目名称和生成的包。
2. 常见问题
2.1 groupId与父groupId重复
Maven 子项目从父项目继承属性。 如果任何 Maven 模块/项目的组 ID 或版本 ID 与父项目相同,那么我们只需删除此条目即可。

移除重复项
2.2 工件不是项目的依赖项
如果在未指定类型属性的情况下添加模块依赖项(war),我们可能会遇到此错误。

模块类型属性
向我提供与在 Eclipse IDE 中创建多模块 Maven 项目有关的问题。
学习愉快!
