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

了解如何从控制台 IDE 创建多模块 Maven 项目。 在此 maven 教程中,我们将学习使用 maven cli 命令创建嵌套的 maven 项目

1. Maven 项目

1.1 Maven 父项目

父 maven 项目的包类型为pom。 它使项目成为一个聚合器 – 不会产生进一步的工件。

1.2 Maven 子项目/模块

  • Maven 子项目是独立的 Maven 项目,但从父项目继承属性。
  • 可以使用单个命令来构建父项目中的所有子项目。
  • 定义项目之间的关系更加容易。 如 JAR 项目可以打包成 WAR 项目。

2. 从控制台创建多模块 Maven 项目

让我们创建一个 maven 项目,其中包含 ear,war 和 jar 类型的模块。 注意如何将archetypeArtifactId设置为pom-root

多模块 Maven 项目 – 控制台 - 图1

项目关系

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

创建父项目将在命令下方。

  1. $ mvn archetype:generate -DgroupId=com.howtodoinjava
  2. -DartifactId=HelloWorldApp
  3. -DarchetypeArtifactId=maven-archetype-quickstart
  4. -DinteractiveMode=false

打开pom.xml文件,并将包类型更改为’pom

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.howtodoinjava</groupId>
  5. <artifactId>HelloWorldApp</artifactId>
  6. <!-- chaged fom jar to pom -->
  7. <packaging>pom</packaging>
  8. <version>1.0-SNAPSHOT</version>
  9. <name>HelloWorldApp</name>
  10. <url>http://maven.apache.org</url>
  11. </project>

1.2 创建 EAR,网络和服务模块

在控制台中,导航到父项目文件夹并为服务(通用代码,例如 DAO),rws(REST 服务或 Web 组件)和 Ear 创建其他模块。

  1. $ cd HelloWorldApp
  2. $ mvn archetype:generate -DgroupId=com.howtodoinjava
  3. -DartifactId=HelloWorldApp-ear
  4. -DarchetypeArtifactId=maven-archetype-quickstart
  5. -DinteractiveMode=false
  6. $ mvn archetype:generate -DgroupId=com.howtodoinjava
  7. -DartifactId=HelloWorldApp-service
  8. -DarchetypeArtifactId=maven-archetype-quickstart
  9. -DinteractiveMode=false
  10. $ mvn archetype:generate -DgroupId=com.howtodoinjava
  11. -DartifactId=HelloWorldApp-rws
  12. -DarchetypeArtifactId=maven-archetype-webapp
  13. -DinteractiveMode=false

1.3 更新 Maven 插件和依赖项

现在该更新添加依赖项(例如,将服务添加到 war 文件中,并将 war 文件添加到 ear 文件中)。 同样,所有用于构建 Ear 和 War 文件工件的 Maven 插件。

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

阅读更多:如何在 Eclipse 中创建多模块 Maven 项目

2. 项目构建过程

要生成项目,请从控制台运行$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] HelloWorldApp-service [jar]
  8. [INFO] HelloWorldApp-rws Maven Webapp [war]
  9. [INFO] HelloWorldApp-ear [jar]
  10. [INFO]
  11. [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ HelloWorldApp-service ---
  12. [WARNING] JAR will be empty - no content was marked for inclusion!
  13. [INFO] Building jar: E:\devsetup\workspacetemp\HelloWorldApp\HelloWorldApp-service\target\HelloWorldApp-service-1.0-SNAPSHOT.jar
  14. [INFO]
  15. [INFO] Copying webapp resources [E:\devsetup\workspacetemp\HelloWorldApp\HelloWorldApp-rws\src\main\webapp]
  16. [INFO] Webapp assembled in [47 msecs]
  17. [INFO] Building war: E:\devsetup\workspacetemp\HelloWorldApp\HelloWorldApp-rws\target\HelloWorldApp-rws.war
  18. [INFO] WEB-INF\web.xml already added, skipping
  19. [INFO]
  20. [INFO] --- maven-install-plugin:2.4:install (default-install) @ HelloWorldApp-ear ---
  21. [INFO] Installing E:\devsetup\workspacetemp\HelloWorldApp\HelloWorldApp-ear\target\HelloWorldApp-ear-1.0-SNAPSHOT.ear to E:\devsetup\M2\com\howtodoinjava\HelloWorldApp-ear\1.0-SNAPSHOT\HelloWorldApp-ear-1.0-SNAPSHOT.ear
  22. [INFO] ------------------------------------------------------------------------
  23. [INFO] Reactor Summary:
  24. [INFO]
  25. [INFO] HelloWorldApp 1.0-SNAPSHOT ......................... SUCCESS [ 0.324 s]
  26. [INFO] HelloWorldApp-service .............................. SUCCESS [ 0.894 s]
  27. [INFO] HelloWorldApp-rws Maven Webapp ..................... SUCCESS [ 0.531 s]
  28. [INFO] HelloWorldApp-ear 1.0-SNAPSHOT ..................... SUCCESS [ 0.565 s]
  29. [INFO] ------------------------------------------------------------------------
  30. [INFO] BUILD SUCCESS
  31. [INFO] ------------------------------------------------------------------------
  32. [INFO] Total time: 2.487 s
  33. [INFO] Finished at: 2018-11-18T22:44:44+05:30
  34. [INFO] ------------------------------------------------------------------------

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

学习愉快!