在我的Maven构建结束时,为此明确目的而存在的一个模块从各种其他模块收集工件,并使用Assembly插件将它们压缩到存档中。 完成后,它会使用Deploy插件将它们部署到Nexus。
由于历史原因,此打包模块称为bundle
,因此工件最终称为mygroup:bundle
,因此归类为Nexus。
我希望它们显示在mygroup:myprojectname
下,但我无法弄清楚如何将它们部署到该位置。
我已尝试配置Deploy插件的deploy-file
目标以更改坐标,但未成功。
作为一个额外的复杂性,项目的主代码模块已被称为myprojectname
,因此该组在部署时不为空。但是,由于分类器和类型,不需要覆盖任何内容。
如果没有重命名模块,我可以以某种方式这样做吗?
答案 0 :(得分:8)
部署插件具有所有必要的功能:
您可以在其配置中设置G / A / V坐标,并将任意数量的其他工件部署到您想要的任何坐标。但是,它不会自动部署到distributionManagement
部分中给出的存储库URL。
为了避免重复,我最终使用GMaven插件,用它来检查项目版本(它是否以-SNAPSHOT
结尾)并设置一个新属性,其URL直接取自{的相应部分{1}}。
以下是两个插件的配置:
distributionManagement
<plugin>
<groupId>org.codehaus.groovy.maven</groupId>
<artifactId>gmaven-plugin</artifactId>
<executions>
<execution>
<id>choose-target-repository</id>
<phase>initialize</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<source>
if (project.version.endsWith("-SNAPSHOT")){
project.properties.targetrepository = project.distributionManagement.snapshotRepository.url;
}
else {
project.properties.targetrepository = project.distributionManagement.repository.url;
}
</source>
</configuration>
</execution>
</executions>
答案 1 :(得分:2)
在maven-deploy-plugin中,您可以提供存储库URL和ID,如下所示:
<repositoryId>${targetrepositoryid}</repositoryId>
<url>${targetrepository}</url>
因此,与project.distributionManagement.repository.url
类似,您也可以定义project.properties.targetrepositoryid = project.distributionManagement.snapshotRepository.id;