【问题标题】:How to create an empty multi module Maven project?如何创建一个空的多模块 Maven 项目?
【发布时间】:2011-06-12 11:08:03
【问题描述】:

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

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

【问题讨论】:

    标签: java maven


    【解决方案1】:

    我发现最简单的方法是使用 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
      

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

    【讨论】:

    • 使用 -Dfilter=pom-root 将为您提供一个选择,而无需选择原型组和工件 ID,如果您放弃原型版本,它只是几个可供选择的选项。对于那些不喜欢打字的人来说,这可能是一条更容易的途径。 :-)
    • 我认为复制/粘贴对于那些不喜欢打字的人来说是最好的;)所以我将命令设置为多行以便于复制/粘贴。
    • 没错,但我只是添加以防万一。 :-D
    • 很遗憾我还是来 SO 复制粘贴这个,而不是仅仅依靠 mvn 实用程序。
    • 太棒了!感谢您的提示。
    【解决方案2】:

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

    输入名称,点击下一步,后续步骤不要更改任何内容,点击完成。

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

    输入模块:

    将光标放在m1 并按Alt+Enter

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

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

    【讨论】:

    • 伙计,这是一个了不起且有用的答案。我可以在 twitter / stackoverflow 回答等中关注你吗?
    • 确保将 <module>m1</module> 包装在 <modules> 标记内。我是 pom 文件的新手,最后花了很多时间来解释为什么 alt + enter 没有显示任何提到的选项。
    【解决方案3】:

    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 脚本或批处理文件将很容易做到这一点。

    【讨论】:

    • 仅供参考,为 pom-root 选择的数字已更改。目前是 449。
    • @mwoodman 感谢您的提示。我编辑了我的答案,使其适用于未来的更改。
    • 仅供参考,数字会根据您从中获取的存储库而变化。
    • 使用 -Dfilter=pom-root 消除了记录数字的需要,并且应该将结果减少到一个。
    【解决方案4】:

    我不确定我是否正确理解了你的问题,但是为了创建一个多模块项目,我通常使用一个简单的 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,但如果您想要构建的项目类型有可用的原型,则通常更容易使用它。

    【讨论】:

    • 我的意思是,记住POM文件的格式很难,每次从头开始写都是浪费时间。因此,每次我想创建一个新项目时,我都会复制并粘贴 pom 文件的内容并将其保存到我的新项目的 pom.xml 中。我正在寻找一种更规范、更有效的方式来创建多模块项目。例如,像 archetype:generate 这样的交互式命令询问我是否要创建一个多模块项目,如果是,它包含哪些模块,然后它会为我创建 pom.xml 文件。
    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

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

      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  \
      

      【讨论】:

        【解决方案7】:

        考虑一个父项目的书签和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
        

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

        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 
        

        要在 eclipse 中创建一个新模块,转到 File->new->other->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 
        

        【讨论】:

          【解决方案8】:

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

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

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

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

          4. 在导入项目时,Eclipse 会报错如下 pom.xml 的项目配置不是最新的。运行 Maven->Update Project 或使用 Quick Fix。 为避免上述错误,请右键单击并选择快速修复。这将更新 POMS。避免此错误的另一种方法是在 Parent pom 中声明子模块

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

          【讨论】:

            猜你喜欢
            • 2017-09-20
            • 2021-11-08
            • 2020-04-01
            • 2014-05-22
            • 2016-10-25
            • 2022-08-14
            • 1970-01-01
            • 2014-03-03
            • 1970-01-01
            相关资源
            最近更新 更多