现在,我经常在网络上找到一个pom.xml
文件,其中包含pom
包装并复制并粘贴它以创建我的父项目。然后我曾在父目录中运行archetype:create
来创建子模块,但从那时起,archetype:create
已被弃用。
有关如何创建新的Maven多模块项目的任何建议吗?
答案 0 :(得分:116)
我发现这样做的最简单方法是使用pom-root
原型创建顶级pom,然后重复使用archetype:generate
分别创建每个模块。这将自动将模块添加到根pom(聚合器)并将根pom设置为每个模块的父pom(编辑:显然一些原型可以具有硬编码的父级,但它适用于maven-archetype-quickstart
)。
以下是细分:
创建顶级根:
mvn archetype:generate \
-DarchetypeGroupId=org.codehaus.mojo.archetypes \
-DarchetypeArtifactId=pom-root \
-DarchetypeVersion=RELEASE
cd
到您新创建的根目录中。
对于每个模块:
mvn archetype:generate \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DarchetypeVersion=RELEASE
请注意,上面的-DarchetypeVersion=RELEASE
会自动使用最新版本的原型。您可能希望在每个命令中添加-DgroupId=...
以避免重复自己。
答案 1 :(得分:46)
这是一个关于如何使用Intellij Idea进行截屏的截屏视频。首先,启动一个新项目(File - > New Project),选择'Maven Module':
输入名称,单击“下一步”,不要在以下步骤中更改任何其他内容,单击“完成”。
现在位于pom.xml
类型<packaging>
并启用自动更新:
输入模块:
将光标放在m1
,然后按 Alt + Enter 。
模块m1
将自动添加到您的项目中。现在你可以为m2
做 Alt + Enter ,就是这样。
您还可以首先为项目的现有模块添加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个步骤。
创建284(默认)原型项目。打开创建的pom文件,将包装从jar改为pom
从项目中删除src文件夹 - 现在这是没有src的Parent项目,因为打包是pom。 在上面的文件夹中创建另一个新项目(默认为284)。将包装改为战争或ejb或耳朵。这成为子模块。
在每个模块上执行mvn eclipse:eclipse。现在,项目应该可以作为Eclipse项目导入。
导入项目时,Eclipse会抱怨以下内容 项目配置与pom.xml不是最新的。运行Maven-&gt;更新项目或使用快速修复。 要避免上述错误,请右键单击并选择“快速修复”。这将更新POMS。另一种避免此错误的方法是通过声明父pom
参考以下链接了解更多详情。 http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Example_1