Maven - 在多模块项目中使用程序集插件创建分发文件
Maven - using assembly plugin in multi-module project to create distribution file
我正在使用 Maven 构建多模块项目;
- 其中包含 9 个 war 个模块
每个模块都有自己的 POM,其中包含有关如何打包的说明;
<packaging>war</packaging>
父 POM 然后负责在每个模块上启动 Maven 生命周期并推送到工件管理器 (Nexus)
<modules>
<module>module1</module>
<module>module2....
我想使用程序集插件将每个模块先前构建的每个 WAR 文件打包成一个 ZIP 文件。我试图通过在父 POM 中定义一个程序集描述符来做到这一点,它为每个模块定义一个单独的 dependencySet(使用 groupID、artifactID 和版本在我的本地 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) 在你的父 pom 中我会喜欢
<modules>
<module>module1</module>
<module>distibution</module>
<module>module2....
(为分发创建一个额外的模块)为了将父pom与分发分开。
2) 您不应在每个子模块目标文件夹中使用输出。添加所有战争作为发行版的依赖项。通过这种方式,maven 可以知道它必须最后构建分发。
3) 提示:将 ${pom.version} 替换为 ${project.version}(我认为前者如果有效则已弃用)
我正在使用 Maven 构建多模块项目;
- 其中包含 9 个 war 个模块
每个模块都有自己的 POM,其中包含有关如何打包的说明;
<packaging>war</packaging>
父 POM 然后负责在每个模块上启动 Maven 生命周期并推送到工件管理器 (Nexus)
<modules>
<module>module1</module>
<module>module2....
我想使用程序集插件将每个模块先前构建的每个 WAR 文件打包成一个 ZIP 文件。我试图通过在父 POM 中定义一个程序集描述符来做到这一点,它为每个模块定义一个单独的 dependencySet(使用 groupID、artifactID 和版本在我的本地 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) 在你的父 pom 中我会喜欢
<modules>
<module>module1</module>
<module>distibution</module>
<module>module2....
(为分发创建一个额外的模块)为了将父pom与分发分开。
2) 您不应在每个子模块目标文件夹中使用输出。添加所有战争作为发行版的依赖项。通过这种方式,maven 可以知道它必须最后构建分发。
3) 提示:将 ${pom.version} 替换为 ${project.version}(我认为前者如果有效则已弃用)