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

73 java maven

现在我经常pom.xml在网上找到一个pom包装并复制并粘贴它以创建我的父项目的文件.然后我曾经archetype:create在父目录中运行来创建子模块,但archetype:create从那时起就被弃用了.

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

Chr*_* H. 120

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

这是细分:

  1. 创建顶级根:

    mvn archetype:generate \
    -DarchetypeGroupId=org.codehaus.mojo.archetypes \
    -DarchetypeArtifactId=pom-root \
    -DarchetypeVersion=RELEASE
    
    Run Code Online (Sandbox Code Playgroud)
  2. cd 进入你新创建的根目录.

  3. 对于每个模块:

    mvn archetype:generate \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-quickstart \
    -DarchetypeVersion=RELEASE
    
    Run Code Online (Sandbox Code Playgroud)

请注意,-DarchetypeVersion=RELEASE上面将自动使用最新版本的原型.您可能希望添加-DgroupId=...到每个命令中以避免重复自己.

  • 令人遗憾的是,我仍然来复制并粘贴它,而不是仅仅依靠mvn实用程序. (6认同)
  • 使用-Dfilter = pom-root将为您提供一个选择,而不必选择原型组和工件ID,并且如果删除archetypeVersion,则只有几个选项可供选择。对于那些讨厌打字的人来说,这可能是一条更容易的途径。:-) (3认同)

And*_*hev 46

这是一个关于如何使用Intellij Idea进行截屏的截屏视频.首先,启动一个新项目(File - > New Project),选择'Maven Module':

在此输入图像描述

键入名称,单击"下一步",不要在以下步骤中更改任何其他内容,单击"完成".

现在在您的pom.xml类型中<packaging>并启用自动更新:

在此输入图像描述

输入模块:

在此输入图像描述

将光标放在m1,然后按Alt+Enter.

在此输入图像描述

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

在此输入图像描述

您还可以首先添加pom.xml项目的现有模块:在项目树中右键单击"添加框架支持...",选择"Maven".这将创建一个pom.xml.


Axe*_*auf 19

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>
Run Code Online (Sandbox Code Playgroud)

所以,基本上你必须自己创建文件夹结构和模块描述符(pom.xml文件).如果您需要多次,可以使用简单的shell脚本或批处理文件轻松完成此操作.

  • 仅供参考,根据您从中获取的存储库,数量会发生变化. (2认同)
  • 使用-Dfilter = pom-root消除了记录数字的需要,并且应该将结果减少到一个. (2认同)

Vij*_*ran 9

我不确定我是否正确理解你的问题,但是对于创建一个多模块项目,我通常使用一个简单的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>
Run Code Online (Sandbox Code Playgroud)

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

  • 我所说的是记忆POM文件的格式很困难,每次从头开始编写都是浪费时间.因此,每次我想创建一个新项目时,我都会复制并粘贴pom文件的内容并将其保存到我的新项目的pom.xml中.我正在寻找一种更有纪律和更有效的方式来创建多模块项目.例如,像`archetype:generate`这样的交互式命令会询问我是否要创建一个多模块项目,如果是这样,它会包含哪些模块,然后它会为我创建`pom.xml`文件. (5认同)

Tho*_*mas 6

如果您正在使用eclipse IDE,则应使用m2eclipse插件.这是创建多模块项目的最简单方法之一.您可以通过在eclipse中创建"Maven Module-Project"来为每个maven项目添加一个模块.执行此操作时,您可以选择父项目.插件可以完成所有操作,这意味着它将新模块复制到父模块并修改pom.xml文件.


Nov*_*ice 6

考虑一个父项目书签和3个子模块rest、security和model,参考Spring文档。它没有 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
Run Code Online (Sandbox Code Playgroud)

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

cd 进入新创建的根目录。参考 @ Chris.H的回答

-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 
Run Code Online (Sandbox Code Playgroud)

要在 eclipse 中创建新模块,请转到文件->新建->其他->maven->maven 模块,这会立即显示在 eclipse 工作区包资源管理器中。

或者从 cli、cd 进入父文件夹(此处为书签)并运行以下命令,它将创建项目,然后您必须将其作为 Maven 项目导入 Eclipse,或者可以从父文件夹(此处为书签项目)工作

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 
Run Code Online (Sandbox Code Playgroud)


Moh*_*BIB 5

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  \
Run Code Online (Sandbox Code Playgroud)