原文: https://howtodoinjava.com/maven/multi-module-project-eclipse/

了解如何在 Eclipse IDE 中创建多模块 Maven 项目。 在此 maven 教程中,我们将学习在 eclipse 中创建嵌套的 maven 项目

1. 创建多模块 Maven 项目

让我们创建一个 maven 项目,其中包含 earwarjar 类型的模块。 我们正在创建企业应用的结构,其中应用将作为 EAR(企业应用获取)文件部署到应用服务器(例如 weblogic,websphere)。

该 EAR 将包含一个(或多个)WAR(Web 应用资源)文件,并且每个 war 将包含服务项目,该服务项目具有面向所有 war 文件的通用代码,打包类型为 JAR(Java ARchive)。

Eclipse 中的 Maven 多模块项目 - 图1

项目关系

1.1 创建父项目 - 打包类型为pom

在 Eclipse 中创建一个新的 Maven 项目。 将其包类型设置为pom

Eclipse 中的 Maven 多模块项目 - 图2

创建 maven 项目

Eclipse 中的 Maven 多模块项目 - 图3

完整的 maven 组 id 和工件 id

Eclipse 中的 Maven 多模块项目 - 图4

将打包 jar 修改为 pom

1.2 创建 Maven 模块 - 包类型为EAR

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

Eclipse 中的 Maven 多模块项目 - 图5

创建新的 maven 模块

Eclipse 中的 Maven 多模块项目 - 图6

添加模块名称

Eclipse 中的 Maven 多模块项目 - 图7

完成的原型详细信息

1.3 创建 Maven 模块 - 打包类型为warjar

与 ear 模块类似,为 war 文件和 jar 服务文件再创建两个模块。 分别更改其包并添加 maven 插件。

1.4 最后结果

现在,在 eclipse 中观察最终的项目结构,并验证所有项目的pom.xml文件。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  5. http://maven.apache.org/xsd/maven-4.0.0.xsd">
  6. <modelVersion>4.0.0</modelVersion>
  7. <groupId>com.howtodoinjava.app</groupId>
  8. <artifactId>HelloWorldApp</artifactId>
  9. <version>0.0.1-SNAPSHOT</version>
  10. <packaging>pom</packaging>
  11. <name>HelloWorldApp</name>
  12. <url>http://maven.apache.org</url>
  13. <properties>
  14. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  15. <maven.compiler.source>1.8</maven.compiler.source>
  16. <maven.compiler.target>1.8</maven.compiler.target>
  17. </properties>
  18. <modules>
  19. <module>web</module>
  20. <module>service</module>
  21. <module>ear</module>
  22. </modules>
  23. </project>
  1. <?xml version="1.0"?>
  2. <project
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
  4. xmlns="http://maven.apache.org/POM/4.0.0"
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  6. <modelVersion>4.0.0</modelVersion>
  7. <parent>
  8. <groupId>com.howtodoinjava.app</groupId>
  9. <artifactId>HelloWorldApp</artifactId>
  10. <version>0.0.1-SNAPSHOT</version>
  11. </parent>
  12. <artifactId>ear</artifactId>
  13. <name>ear</name>
  14. <packaging>ear</packaging>
  15. <properties>
  16. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  17. </properties>
  18. <dependencies>
  19. <dependency>
  20. <groupId>com.howtodoinjava.app</groupId>
  21. <artifactId>web</artifactId>
  22. <version>0.0.1-SNAPSHOT</version>
  23. <type>war</type>
  24. </dependency>
  25. </dependencies>
  26. <build>
  27. <pluginManagement>
  28. <plugins>
  29. <plugin>
  30. <groupId>org.apache.maven.plugins</groupId>
  31. <artifactId>maven-ear-plugin</artifactId>
  32. <version>3.0.1</version>
  33. <configuration>
  34. <modules>
  35. <webModule>
  36. <groupId>com.howtodoinjava.app</groupId>
  37. <artifactId>web</artifactId>
  38. <uri>web-0.0.1-SNAPSHOT.war</uri>
  39. <!-- Set custom context root -->
  40. <contextRoot>/application</contextRoot>
  41. </webModule>
  42. </modules>
  43. </configuration>
  44. </plugin>
  45. </plugins>
  46. </pluginManagement>
  47. </build>
  48. </project>
  1. <?xml version="1.0"?>
  2. <project
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
  4. xmlns="http://maven.apache.org/POM/4.0.0"
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  6. <modelVersion>4.0.0</modelVersion>
  7. <parent>
  8. <groupId>com.howtodoinjava.app</groupId>
  9. <artifactId>HelloWorldApp</artifactId>
  10. <version>0.0.1-SNAPSHOT</version>
  11. </parent>
  12. <groupId>com.howtodoinjava.app</groupId>
  13. <artifactId>web</artifactId>
  14. <version>0.0.1-SNAPSHOT</version>
  15. <name>web</name>
  16. <url>http://maven.apache.org</url>
  17. <packaging>war</packaging>
  18. <properties>
  19. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  20. </properties>
  21. <dependencies>
  22. <dependency>
  23. <groupId>com.howtodoinjava.app</groupId>
  24. <artifactId>service</artifactId>
  25. <version>0.0.1-SNAPSHOT</version>
  26. </dependency>
  27. </dependencies>
  28. </project>
  1. <?xml version="1.0"?>
  2. <project
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
  4. xmlns="http://maven.apache.org/POM/4.0.0"
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  6. <modelVersion>4.0.0</modelVersion>
  7. <parent>
  8. <groupId>com.howtodoinjava.app</groupId>
  9. <artifactId>HelloWorldApp</artifactId>
  10. <version>0.0.1-SNAPSHOT</version>
  11. </parent>
  12. <groupId>com.howtodoinjava.app</groupId>
  13. <artifactId>service</artifactId>
  14. <version>0.0.1-SNAPSHOT</version>
  15. <name>service</name>
  16. <url>http://maven.apache.org</url>
  17. <packaging>jar</packaging>
  18. <properties>
  19. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  20. </properties>
  21. <dependencies>
  22. <dependency>
  23. <groupId>junit</groupId>
  24. <artifactId>junit</artifactId>
  25. <version>3.8.1</version>
  26. <scope>test</scope>
  27. </dependency>
  28. </dependencies>
  29. </project>

要生成项目,请从控制台运行$mvn clean install命令。

  1. E:\devsetup\workspacetemp\HelloWorldApp>mvn clean install
  2. [INFO] Scanning for projects...
  3. [INFO] ------------------------------------------------------------------------
  4. [INFO] Reactor Build Order:
  5. [INFO]
  6. [INFO] HelloWorldApp [pom]
  7. [INFO] service [jar]
  8. [INFO] web [war]
  9. [INFO] ear [ear]
  10. [INFO]
  11. ...
  12. ...
  13. [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ service ---
  14. [WARNING] JAR will be empty - no content was marked for inclusion!
  15. [INFO] Building jar: E:\devsetup\workspacetemp\HelloWorldApp\service\target\service-0.0.1-SNAPSHOT.jar
  16. [INFO]
  17. ...
  18. ...
  19. [INFO] Packaging webapp
  20. [INFO] Assembling webapp [web] in [E:\devsetup\workspacetemp\HelloWorldApp\web\target\web-0.0.1-SNAPSHOT]
  21. [INFO] Processing war project
  22. [INFO] Copying webapp resources [E:\devsetup\workspacetemp\HelloWorldApp\web\src\main\webapp]
  23. [INFO] Webapp assembled in [47 msecs]
  24. [INFO] Building war: E:\devsetup\workspacetemp\HelloWorldApp\web\target\web-0.0.1-SNAPSHOT.war
  25. [INFO] WEB-INF\web.xml already added, skipping
  26. [INFO]
  27. ...
  28. ...
  29. [INFO]
  30. [INFO] --- maven-ear-plugin:3.0.1:ear (default-ear) @ ear ---
  31. [INFO] Copying artifact [war:com.howtodoinjava.app:web:0.0.1-SNAPSHOT] to [web-0.0.1-SNAPSHOT.war]
  32. [INFO] Copy ear sources to E:\devsetup\workspacetemp\HelloWorldApp\ear\target\ear-0.0.1-SNAPSHOT
  33. [INFO] Building jar: E:\devsetup\workspacetemp\HelloWorldApp\ear\target\ear-0.0.1-SNAPSHOT.ear
  34. [INFO]
  35. [INFO] ------------------------------------------------------------------------
  36. [INFO] Reactor Summary:
  37. [INFO]
  38. [INFO] HelloWorldApp 0.0.1-SNAPSHOT ....................... SUCCESS [ 0.328 s]
  39. [INFO] service ............................................ SUCCESS [ 0.839 s]
  40. [INFO] web ................................................ SUCCESS [ 0.838 s]
  41. [INFO] ear 0.0.1-SNAPSHOT ................................. SUCCESS [ 0.588 s]
  42. [INFO] ------------------------------------------------------------------------
  43. [INFO] BUILD SUCCESS
  44. [INFO] ------------------------------------------------------------------------
  45. [INFO] Total time: 2.749 s
  46. [INFO] Finished at: 2018-11-18T15:04:52+05:30
  47. [INFO] ------------------------------------------------------------------------

构建会生成名称为ear-0.0.1-SNAPSHOT.ear的 ear 文件。 可以根据需要随意更改项目名称和生成的包。

2. 常见问题

2.1 groupId与父groupId重复

Maven 子项目从父项目继承属性。 如果任何 Maven 模块/项目的组 ID 或版本 ID 与父项目相同,那么我们只需删除此条目即可。

Eclipse 中的 Maven 多模块项目 - 图8

移除重复项

2.2 工件不是项目的依赖项

如果在未指定类型属性的情况下添加模块依赖项(war),我们可能会遇到此错误。

Eclipse 中的 Maven 多模块项目 - 图9

模块类型属性

向我提供与在 Eclipse IDE 中创建多模块 Maven 项目有关的问题。

学习愉快!