【问题标题】:How to assemble a multi module project in Maven如何在 Maven 中组装一个多模块项目
【发布时间】:2012-03-06 03:59:01
【问题描述】:

我正在尝试制作一个多模块项目。我有一个用于 JAR 的模块,其中包含模型、控制器和服务类,还有一个用于 WAR 的模块。我已成功构建项目并生成了结果,但我不确定文件夹的结构。

目前我在同一个项目中制作了一个 Maven 模块。

文件夹是:

Parent
Module1
Module2

他们都在同一级别,对吗?或者 Module1 和 Module2 应该在 Parent 文件夹中吗?是否有可能(或者它会自动发生)让生成的目标出现在父文件夹中而不是每个模块中?或者也许没有必要。

我正在使用 IntelliJ 11 IDEA。

http://www.sonatype.com/books/mvnex-book/reference/multimodule-sect-intro.html

【问题讨论】:

    标签: java jakarta-ee maven intellij-idea


    【解决方案1】:

    通常人们将模块放在父级下(逻辑上和目录结构中)。但这不是法律。这只是一个建议。 现在您必须创建 4 个 pom.xml 文件: 一个在顶层,每个项目一个(父级、模块 1 和模块 2)。顶级 pom 应提及其所有 3 个子项目:

    <modules>
        <module>parent</module>     
        <module>module1</module>
        <module>module2</module>        
    </modules>
    

    如果 module1 和 2 依赖于 parent(即在同一级别),请说:

    <dependencies>
        <dependency>
            <groupId>com.yourcompany.yourproject</groupId>
            <artifactId>parent</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    <dependencies>
    

    【讨论】:

    • 那么在 IntelliJ 中你会怎么做呢?您是否在父模块中创建模块?
    【解决方案2】:

    您可以将所有模块和父模块放在同一层次结构中。 我发现的一个好方法是为父级创建一个文件夹,该文件夹将有一个 pom.xml 文件。 在那个 pom 中你需要定义子模块:

    <modules>
      <module>shared</module>
      <module>common</module>
      <module>dal</module>
      <module>logic</module>
    </modules>
    

    如果所有模块都在同一个文件夹层次结构中,那么您需要执行以下操作:

    <module>../shared</module>
    

    在子模块中,需要设置父模块的版本:

    <parent>
        <artifactId>Aggregation</artifactId>
        <groupId>com.mycomm</groupId>
        <version>3.0.2-SNAPSHOT</version>
    </parent>
    

    要在同一个项目中的每个模块之间建立依赖关系:

    <dependency>
        <groupId>com.mycomm</groupId>
        <artifactId>shared</artifactId>
        <version>${project.version}</version>
    </dependency>
    

    如果您更改父级的 pom,您还需要更改所有子模块父级的 pom。 你可以使用 mvn-release-plugin 示例:

    mvn release:update-versions -DautoVersionSubmodules=true -DdevelopmentVersion=1.0.0.2-SNAPSHOT
    

    【讨论】:

    • 好吧,但是 IntelliJ 如何允许您将 Maven 模块放入另一个 Maven 模块中?
    • 我不知道它在 IntelliJ 中是如何完成的。在 Eclipse 中,我只是将所有模块导入为 maven 项目,它“知道”要做什么。我猜在 InteliJ 中它会是相似的。
    猜你喜欢
    • 1970-01-01
    • 2021-01-04
    • 2011-02-11
    • 2018-08-15
    • 2014-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多