如何在Maven中组装多模块项目

时间:2012-02-14 19:11:25

标签: java java-ee maven intellij-idea

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

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

文件夹是:

Parent
Module1
Module2

他们都处于同一水平,这是正确的吗?或者Module1和Module2应该在Parent文件夹中?是否有可能(或将自动发生)使生成的目标出现在父文件夹而不是每个模块中?或者也许没有必要。

我正在使用IntelliJ 11 IDEA。

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

2 个答案:

答案 0 :(得分:4)

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

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

如果module1和2依赖于父级(处于同一级别),只需说:

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

答案 1 :(得分:0)

您可以将所有模块和父项放在同一层次结构中。 我找到的一个好方法是为父级提供一个文件夹,它将有一个pom。 在那个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