如何创建一个空的多模块 Maven 项目?

现在,我通常会在网上找到一个 pom.xml文件,它有一个 pom包,然后复制粘贴它来创建我的父项目。然后,我曾经在父目录中运行 archetype:create来创建子模块,但是从那时起,archetype:create就不再被推荐了。

有关于如何创建新的 Maven 多模块项目的建议吗?

78594 次浏览

我不确定我是否正确理解了你的问题,但是对于创建一个多模块项目,我通常使用一个简单的 pom (在根级别) :

<?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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>


<groupId>com.vijaykiran</groupId>
<artifactId>myproject-parent</artifactId>
<version>1.0</version>
<packaging>pom</packaging>


<modules>
<module>m1</module>
<module>m2</module>
</modules>
</project>

这可能是您可以使用的最简单的多模块父 pom。您要创建的项目可能已经具有一个原型,该原型可能有助于您创建结构。虽然您可以从 IDE 获得帮助来自己编写 pom,但是如果您想要构建的项目类型有一个可用的原型,那么通常使用它会更容易。

mvn archetype:create已被弃用,取而代之的是 mvn archetype:generate,因此只是名称改变了。在官方存储库中有一个用于多模块项目的原型,因此运行这个命令会产生(最低限度的)结果:

[axe@gromp test]$ mvn archetype:generate
..
<num>: remote -> pom-root (Root project archetype for creating multi module projects)
..
Choose a number: 109: <num>
..


[axe@gromp test]$ tree
.
└── modules.test
└── pom.xml


1 directory, 1 file


[axe@gromp test]$ cat modules.test/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.example</groupId>
<artifactId>modules.test</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>modules.test</name>
</project>

因此,基本上您必须自己创建文件夹结构和模块描述符(pom.xml 文件)。使用简单的 shell 脚本或批处理文件很容易做到这一点,如果您需要它不止一次。

如果使用 eclipseIDE,则应使用 M2eclipse 插件。这是创建多模块项目最简单的方法之一。您可以通过在 eclipse 中创建一个“ Maven Module-Project”来为每个 Maven 项目添加一个模块。当这样做时,您有可能选择一个父项目。插件完成了所有工作,这意味着它将新模块复制到父模块并修改 pom.xml 文件。

如果您想避免 xml 复制粘贴,可以使用简单的4个步骤。

  1. 创建一个284(默认)原型项目

  2. 从项目中删除 src 文件夹-这现在是没有 src 的 Parent 项目,因为打包是 pom。 在上面的文件夹中创建另一个新项目(默认值为284)。将包装改为 war、 ejb 或 ear。这成为子模块。

  3. 在每个模块上执行 mvneclipse: Eclipse。

  4. 在导入项目时,Eclipse 会抱怨以下情况 项目配置与 pom.xml 不同,运行 Maven-> Update Project 或使用 Quick Fix。 若要避免上述错误,请右击并选择“快速修复”。这将更新 POMS。避免此错误的另一种方法是在 Parent pom

  5. 中声明子模块

详情请参阅以下连结。 Http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#example_1

我发现最简单的方法是使用 pom-root原型来创建顶级 pom,然后重复使用 archetype:generate来单独创建每个模块。这将自动将模块添加到根 pom (聚合器) ,并将根 pom 设置为每个模块的父 pom (编辑: 显然一些原型可以有一个硬编码的父 pom,但它适用于 maven-archetype-quickstart)。

以下是详细情况:

  1. 创建顶级根目录:

    mvn archetype:generate \
    -DarchetypeGroupId=org.codehaus.mojo.archetypes \
    -DarchetypeArtifactId=pom-root \
    -DarchetypeVersion=RELEASE
    
  2. cd into your newly created root dir.

  3. For each module:

    mvn archetype:generate \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-quickstart \
    -DarchetypeVersion=RELEASE
    

Note that -DarchetypeVersion=RELEASE above will automatically use the latest version of the archetype. You may want to add -DgroupId=... to each of those commands to avoid repeating yourself.

这里是一个关于如何使用 Intellij Ideas 做到这一点的视频。首先,启动一个新项目(文件-> 新项目) ,选择“ Maven Module”:

enter image description here

键入一个名称,单击下一步,不要更改以下步骤中的任何内容,单击 Finish。

现在在 pom.xml中键入 <packaging>并启用自动更新:

enter image description here

输入模组:

enter image description here

将光标置于 m1并按 Alt+Enter

enter image description here

模块 m1将自动添加到您的项目。现在您可以做 Alt+Enterm2,就是这样。

enter image description here

您也可以从为项目的现有模块添加 pom.xml开始: 在项目树“ Add Framework Support...”中右键单击它,选择“ Maven”。这将创建一个 pom.xml

答案与 Chris H.相同,我只是添加了 groupId、 artifactId 和版本选项,并禁用了交互模式。

mvn archetype:generate -DarchetypeGroupId=org.codehaus.mojo.archetypes \
-DarchetypeArtifactId=pom-root \
-DarchetypeVersion=RELEASE \
-DinteractiveMode=false \
-DgroupId=com.mycompany.app \
-DartifactId=my-app \
-Dversion=1.0.0-SNAPSHOT  \

考虑一个父项目书签和3个子模块休息,安全和模型,参考 Spring Docs。 它没有 Spring 文档中的依赖关系,只是从多模块的角度进行了基本的设置。

以非交互模式/批处理模式创建父 maven 项目

mvn archetype:generate \
-DarchetypeGroupId=org.codehaus.mojo.archetypes \
-DarchetypeArtifactId=pom-root \
-DarchetypeVersion=RELEASE \
-DgroupId=bookmarks \
-DartifactId=bookmarks \
-Dversion=0.0.1-SNAPSHOT \
-DinteractiveMode=false

在非交互模式/批处理模式下创建子模块。

Cd 到新创建的根目录中

- Dpackage 是包的结构,这里是书签。 如果没有指定,那么它将把 artifactId 视为默认包

mvn archetype:generate \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DarchetypeVersion=RELEASE \
-DgroupId=model \
-DartifactId=model \
-Dversion=0.0.1-SNAPSHOT \
-Dpackage=bookmarks \
-DinteractiveMode=false

要在 eclipsegoto File-> new-> other-> maven-> maven 模块中创建一个新模块,这将立即显示在 eclipseworkspace 包资源管理器中。

或者从 cli、 cd 里面的父文件夹中,在这里添加书签并运行以下命令,就可以了 创建项目,然后您必须导入到 Eclipse 作为一个 maven 项目,或者可以从父项目工作,这里是书签项目

mvn archetype:generate \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DarchetypeVersion=RELEASE \
-DgroupId=security \
-DartifactId=security \
-Dversion=0.0.1-SNAPSHOT \
-Dpackage=bookmarks \
-DinteractiveMode=false