如何使用命令行创建Maven多模块

x33g5p2x  于2022-10-15 转载在 Maven  
字(9.9k)|赞(0)|评价(0)|浏览(1465)

在本教程中,我们将学习如何用简单的步骤使用命令行创建一个简单的Java多模块Maven项目
多模块项目由引用一个或多个子模块的父POM定义

使用命令行创建Maven多模块

在本教程中,我们将创建一个具有不同模块的博客web应用程序
让我们创建一个博客作为父项目,它的3个子模块是:

  • blogger-core
  • blogger-common
  • blogger-web

以下是创建父模块和子模块项目的步骤。

1创建父项目-blogger

让我们使用以下命令创建父Maven项目:

  1. mvn archetype:generate -DgroupId=com.companyname.blogger -DartifactId=blogger

注意,整个命令应该是一行。构建成功后,我们将在命令行控制台中看到以下输出。

  1. [INFO] Parameter: package, Value: com.companyname.blogger
  2. [INFO] Parameter: groupId, Value: com.companyname.blogger
  3. [INFO] Parameter: artifactId, Value: blogger
  4. [INFO] Parameter: packageName, Value: com.companyname.blogger
  5. [INFO] Parameter: version, Value: 1.0-SNAPSHOT
  6. [INFO] project created from Old (1.x) Archetype in dir: C:\Ramesh_Study\maven\guides\blogger
  7. [INFO] ------------------------------------------------------------------------
  8. [INFO] BUILD SUCCESS
  9. [INFO] ------------------------------------------------------------------------
  10. [INFO] Total time: 01:09 min
  11. [INFO] Finished at: 2018-06-20T13:40:40+05:30
  12. [INFO] ------------------------------------------------------------------------

2.更新pom.xml将其声明为父项目

打开pom上面创建的Parent-Maven项目(blogger)的xml并将打包更改为“pom”。

  1. <packaging>pom</packaging>

完整的pom.xml

  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/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.companyname.blogger</groupId>
  5. <artifactId>blogger</artifactId>
  6. <version>1.0-SNAPSHOT</version>
  7. <packaging>pom</packaging>
  8. <name>blogger</name>
  9. <url>http://maven.apache.org</url>
  10. <properties>
  11. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  12. </properties>
  13. <dependencies>
  14. <dependency>
  15. <groupId>junit</groupId>
  16. <artifactId>junit</artifactId>
  17. <version>3.8.1</version>
  18. <scope>test</scope>
  19. </dependency>
  20. </dependencies>
  21. </project>

如果不更改pom.xml,则会出现以下构建失败错误:

  1. [INFO] Parameter: groupId, Value: com.companyname.blogger
  2. [INFO] Parameter: artifactId, Value: blogger-core
  3. [INFO] Parameter: version, Value: 1.0-SNAPSHOT
  4. [INFO] Parameter: package, Value: com.companyname.blogger
  5. [INFO] Parameter: packageInPathFormat, Value: com/companyname/blogger
  6. [INFO] Parameter: version, Value: 1.0-SNAPSHOT
  7. [INFO] Parameter: package, Value: com.companyname.blogger
  8. [INFO] Parameter: groupId, Value: com.companyname.blogger
  9. [INFO] Parameter: artifactId, Value: blogger-core
  10. [INFO] ------------------------------------------------------------------------
  11. [INFO] BUILD FAILURE
  12. [INFO] ------------------------------------------------------------------------
  13. [INFO] Total time: 01:49 min
  14. [INFO] Finished at: 2018-06-20T13:49:18+05:30
  15. [INFO] ------------------------------------------------------------------------
  16. [ERROR] Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:3.0.1:generate (default-cli) validPackaging: **Unable to add module to the current project as it is not of packaging type 'pom'** -> [Help 1]

3.创建子模块

通过以下命令

  1. cd blogger

更改目录
让我们在blogger父项目中创建子模块。
1.创建blogger-core模块。

  1. mvn archetype:generate -DgroupId=com.companyname.blogger -DartifactId=blogger-core

1.创建blogger-common模块

  1. mvn archetype:generate -DgroupId=com.companyname.blogger -DartifactId=blogger-common

1.创建blogger-web模块,它是一个包含war文件的web应用程序。maven web应用程序的原型是-DarchetypeArtifactId=maven-archetype-webapp

  1. mvn archetype:generate -DgroupId=com.companyname.blogger -DartifactId=blogger-web -DarchetypeArtifactId=maven-archetype-webapp

现在,如果打开blogger父项目pom.xml,您会发现其中添加了所有三个模块。

  1. <modules>
  2. <module>blogger-core</module>
  3. <module>blogger-common</module>
  4. <module>blogger-web</module>
  5. </modules>

此外,在每个子模块pom.xml中添加父节点。

  1. <parent>
  2. <artifactId>blogger</artifactId>
  3. <groupId>com.companyname.blogger</groupId>
  4. <version>1.0-SNAPSHOT</version>
  5. </parent>

4.更新子模块pom.xml

打开blogger-core模块的pom.xml,并用jar:

  1. <packaging>jar</packaging>

更新打包
打开blogger-common模块的pom.xml,并用jar更新打包:

  1. <packaging>jar</packaging>

打开blogger-web模块的pom.xml,并用war更新打包:

  1. <packaging>war</packaging>

让我们看看所有父模块和子模块的完整更新pom.xml文件。

1.博客父项目pom.xml:

  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <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">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.companyname.blogger</groupId>
  5. <artifactId>blogger</artifactId>
  6. <version>1.0-SNAPSHOT</version>
  7. <packaging>pom</packaging>
  8. <name>blogger</name>
  9. <url>http://maven.apache.org</url>
  10. <properties>
  11. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  12. </properties>
  13. <dependencies>
  14. <dependency>
  15. <groupId>junit</groupId>
  16. <artifactId>junit</artifactId>
  17. <version>3.8.1</version>
  18. <scope>test</scope>
  19. </dependency>
  20. </dependencies>
  21. <modules>
  22. <module>blogger-common</module>
  23. <module>blogger-web</module>
  24. <module>blogger-core</module>
  25. </modules>
  26. </project>

2.博客核心子模块pom.xml:

  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <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">
  3. <modelVersion>4.0.0</modelVersion>
  4. <parent>
  5. <artifactId>blogger</artifactId>
  6. <groupId>com.companyname.blogger</groupId>
  7. <version>1.0-SNAPSHOT</version>
  8. </parent>
  9. <groupId>com.companyname.blogger</groupId>
  10. <artifactId>blogger-core</artifactId>
  11. <version>1.0-SNAPSHOT</version>
  12. <packaging>jar</packaging>
  13. <name>blogger-core</name>
  14. <!-- FIXME change it to the project's website -->
  15. <url>http://www.example.com</url>
  16. <properties>
  17. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  18. <maven.compiler.source>1.7</maven.compiler.source>
  19. <maven.compiler.target>1.7</maven.compiler.target>
  20. </properties>
  21. <dependencies>
  22. <dependency>
  23. <groupId>junit</groupId>
  24. <artifactId>junit</artifactId>
  25. <version>4.11</version>
  26. <scope>test</scope>
  27. </dependency>
  28. </dependencies>
  29. </project>

3.blogger公共子模块pom.xml:

  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <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">
  3. <modelVersion>4.0.0</modelVersion>
  4. <parent>
  5. <artifactId>blogger</artifactId>
  6. <groupId>com.companyname.blogger</groupId>
  7. <version>1.0-SNAPSHOT</version>
  8. </parent>
  9. <groupId>com.companyname.blogger</groupId>
  10. <artifactId>blogger-common</artifactId>
  11. <version>1.0-SNAPSHOT</version>
  12. <packaging>jar</packaging>
  13. <name>blogger-common</name>
  14. <!-- FIXME change it to the project's website -->
  15. <url>http://www.example.com</url>
  16. <properties>
  17. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  18. <maven.compiler.source>1.7</maven.compiler.source>
  19. <maven.compiler.target>1.7</maven.compiler.target>
  20. </properties>
  21. <dependencies>
  22. <dependency>
  23. <groupId>junit</groupId>
  24. <artifactId>junit</artifactId>
  25. <version>4.11</version>
  26. <scope>test</scope>
  27. </dependency>
  28. </dependencies>
  29. </project>

4.blogger web子模块pom.xml:

  1. <?xmlversion="1.0"?>
  2. <project xsi: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"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>com.companyname.blogger</groupId>
  7. <artifactId>blogger</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <groupId>com.companyname.blogger</groupId>
  11. <artifactId>blogger-web</artifactId>
  12. <version>1.0-SNAPSHOT</version>
  13. <packaging>war</packaging>
  14. <name>blogger-web Maven Webapp</name>
  15. <url>http://maven.apache.org</url>
  16. <dependencies>
  17. <dependency>
  18. <groupId>junit</groupId>
  19. <artifactId>junit</artifactId>
  20. <version>3.8.1</version>
  21. <scope>test</scope>
  22. </dependency>
  23. </dependencies>
  24. <build>
  25. <finalName>blogger-web</finalName>
  26. </build>
  27. </project>

5.构建多模块

要测试所有多模块项目设置是否正确,请在blogger父项目的maven-common下运行:

  1. mvn clean install

上述命令的输出

  1. [INFO] Reactor Summary:
  2. [INFO]
  3. [INFO] blogger 1.0-SNAPSHOT ............................... SUCCESS [ 0.746 s]
  4. [INFO] blogger-common ..................................... SUCCESS [ 5.727 s]
  5. [INFO] blogger-core ....................................... SUCCESS [ 1.775 s]
  6. [INFO] blogger-web Maven Webapp 1.0-SNAPSHOT .............. SUCCESS [ 0.809 s]
  7. [INFO] ------------------------------------------------------------------------
  8. [INFO] BUILD SUCCESS
  9. [INFO] ------------------------------------------------------------------------
  10. [INFO] Total time: 9.289 s
  11. [INFO] Finished at: 2018-06-20T14:20:05+05:30
  12. [INFO] ------------------------------------------------------------------------

就是这样
现在可以将此项目导入Eclipse IDE在Eclipse中,文件->导入->Maven->现有Maven项目

结论

在本教程中,我们以blogger项目为例,学习了如何使用命令行创建maven Multi-Module
这个多模块项目的源代码可以在GitHub上找到。
Github存储库:Maven Multi Module Project

相关文章

最新文章

更多