Maven - 在多模块项目中使用程序集插件来创建分发文件

时间:2015-09-07 07:48:20

标签: maven packaging maven-assembly-plugin

我正在使用Maven构建一个多模块项目;

  • 由9个战争模块组成

每个模块都有自己的POM,其中包含有关如何打包的说明;

<packaging>war</packaging>

父POM负责在每个模块上启动Maven生命周期并推送到工件管理器(Nexus)

<modules>
  <module>module1</module>
   <module>module2....

我想使用程序集插件将每个模块先前构建的每个WAR文件打包到一个ZIP文件中。我试图通过在父POM中定义一个程序集描述符来做到这一点,它为每个模块定义了一个单独的dependencySet(使用groupID,artifactID和version来在我的本地repo中找到WAR)。

我已尝试使用以下程序集文件来实现此目的;

<assembly>
  <id>war</id>
  <includeBaseDirectory>false</includeBaseDirectory>
  <formats>
    <format>zip</format>
  </formats>
  <dependencySets>
    <dependencySet>
      <useProjectArtifact>false</useProjectArtifact>
      <includes>
         <include>com:test-web:war:${pom.version}</include>
      </includes>
      <outputFileNameMapping>test-web.war</outputFileNameMapping>
    </dependencySet>
  </dependencySets>
</assembly>

这是我父POM中的插件配置;

<plugin>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <version>2.5.3</version>
                    <executions>
                        <execution>
                            <id>distribution-package</id>
                            <phase>package</phase>
                            <goals>
                                <goal>single</goal>
                            </goals>
                            <configuration>
                                <runOnlyAtExecutionRoot>true</runOnlyAtExecutionRoot>
                                <descriptors>
                                    <descriptor>assembly.xml</descriptor>
                                </descriptors>
                                <formats>
                                    <format>zip</format>
                                </formats>
                                <includeBaseDirectory>false</includeBaseDirectory>
                            </configuration>
                      </execution>
                    </executions>
                </plugin>

这种方法是否正确? 另外从我的本地仓库中提取WAR文件是否有意义?我应该在每个子模块目标文件夹中使用输出吗?

1 个答案:

答案 0 :(得分:2)

1)在你父母的pom中我会像

一样
<modules>
<module>module1</module>
<module>distibution</module>
<module>module2....

(为分发创建一个额外的模块)为了将父pom与分发分开。

2)您不应该在每个子模块目标文件夹中使用输出。将所有战争添加为分布的依赖关系。通过这种方式,maven可以知道它必须最后建立分发。

3)提示:将$ {pom.version}替换为$ {project.version}(我认为如果它完全适用,前者已被弃用)