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

时间:2011-06-12 11:08:04

标签: java maven

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

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

8 个答案:

答案 0 :(得分:116)

我发现这样做的最简单方法是使用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
    
  2. cd到您新创建的根目录中。

  3. 对于每个模块:

    mvn archetype:generate \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-quickstart \
    -DarchetypeVersion=RELEASE
    
  4. 请注意,上面的-DarchetypeVersion=RELEASE会自动使用最新版本的原型。您可能希望在每个命令中添加-DgroupId=...以避免重复自己。

答案 1 :(得分:46)

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

enter image description here

输入名称,单击“下一步”,不要在以下步骤中更改任何其他内容,单击“完成”。

现在位于pom.xml类型<packaging>并启用自动更新:

enter image description here

输入模块:

enter image description here

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

enter image description here

模块m1将自动添加到您的项目中。现在你可以为m2 Alt + Enter ,就是这样。

enter image description here

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

答案 2 :(得分: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>

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

答案 3 :(得分: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>

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

答案 4 :(得分:6)

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

答案 5 :(得分: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  \

答案 6 :(得分:3)

考虑父项目书签和3个子模块rest,security和model,引用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

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

进入新创建的根目录。参考@ 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 

要在eclipse goto File-&gt; new-&gt; other-&gt; maven-&gt; maven模块中创建一个新模块,它会立即显示在eclipse工作区包浏览器中。

或者从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 

答案 7 :(得分:1)

如果您想避免xml复制粘贴,只需简单的4个步骤。

  1. 创建284(默认)原型项目。打开创建的pom文件,将包装从jar改为pom

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

  3. 在每个模块上执行mvn eclipse:eclipse。现在,项目应该可以作为Eclipse项目导入。

  4. 导入项目时,Eclipse会抱怨以下内容 项目配置与pom.xml不是最新的。运行Maven-&gt;更新项目或使用快速修复。 要避免上述错误,请右键单击并选择“快速修复”。这将更新POMS。另一种避免此错误的方法是通过声明父pom

  5. 中的子模块

    参考以下链接了解更多详情。 http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Example_1