Ale*_*rio 10 maven-3 maven maven-assembly-plugin
我有一个多模块项目,其中包含2个模块(每个模块都有自己的pom.xml)和一个指向这些模块的父pom.xml.
当我在父pom上运行"mvn clean package"时,每个项目最终都会在它自己的目标文件夹下面有一个zip文件.我想在zip文件的根文件夹下打包一个包含每个模块zip文件的zip文件,但是我遇到了一些问题.
我在父pom.xml文件夹中创建了一个程序集文件:
<!-- Release distribution -->
<assembly>
<id>release</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${basedir}/projectA/target/</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>*.tar.gz</include>
</includes>
</fileSet>
<fileSet>
<directory>${basedir}/projectB/target/</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>*.tar.gz</include>
</includes>
</fileSet>
</fileSets>
</assembly>
Run Code Online (Sandbox Code Playgroud)
虽然上述工作,如果我们开始向这个项目添加越来越多的模块,那么必须不断更新这个程序集会非常烦人.
理想情况下,我希望它能自动进入模块的每个目标文件夹并在那里获得一个zip文件.
这可以通过这样做来完成
...
<fileSet>
<directory>${basedir}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>**/target/*.tar.gz</include>
</includes>
</fileSet>
Run Code Online (Sandbox Code Playgroud)
但是这里的问题是zip文件将包含完整路径,所以不是在根文件夹中有zip文件,zip文件将有projectA/target/xxxx.zip和projectB/target/xxxx.zip这正是我做的不想.
有没有办法在maven中进行简单的程序集,所以每次添加新模块时都不需要更新它,而且zip中没有完整的路径?
编辑1
看起来这根本不可能.要么你得到一个结构良好的zip文件与一个难以维护的程序集,或者你得到一个易于维护但令人讨厌的结构化zip文件.在我能找到合适的解决方案之前,我将不予回答
编辑2
回来为此寻找解决方案.关于下面发布的khmarbaise解决方案,它有一些问题: - 它依赖于依赖的程序集,在我的情况下我只想要一个程序集的程序集(更像是fileSets而不是依赖集) - 它依赖于我手动的事实指定我想要包含在程序集中的项目.我已经在父pom中有这个信息,它指定了应该构建哪些模块,所以如果我从父pom中删除一个模块以便它不再构建,程序集应该已经知道并跳过选择该项目(原因fileset似乎工作得很好,除了程序集zip中的shitty,不可控制的路径).
没有人真的遇到过类似的问题吗?
首先,我建议创建包含最终包的dist-packaging模块.此外,听起来你的汇编描述符用于创建包含其他人的zip文件的最终存档是错误的.
<id>proj1-assembly</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>/</outputDirectory>
<useProjectArtifact>false</useProjectArtifact>
<unpack>false</unpack>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
Run Code Online (Sandbox Code Playgroud)
但是你必须意识到你必须像往常一样维护dist-module中的依赖关系,如下所示:
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>package-one</artifactId>
<version>${project.version}</version>
<classifier>package-1-assembly</classifier>
<type>zip</type>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>package-two</artifactId>
<version>${project.version}</version>
<classifier>package-2-assembly</classifier>
<type>zip</type>
</dependency>
....
Run Code Online (Sandbox Code Playgroud)
在这里你可以找到一个完整的工作示例.
| 归档时间: |
|
| 查看次数: |
8313 次 |
| 最近记录: |