如何控制Maven工件的Group / Artifact / Version坐标?

时间:2012-11-29 08:13:55

标签: maven deployment maven-assembly-plugin maven-deploy-plugin

在我的Maven构建结束时,为此明确目的而存在的一个模块从各种其他模块收集工件,并使用Assembly插件将它们压缩到存档中。 完成后,它会使用Deploy插件将它们部署到Nexus。

由于历史原因,此打包模块称为bundle,因此工件最终称为mygroup:bundle,因此归类为Nexus。

我希望它们显示在mygroup:myprojectname下,但我无法弄清楚如何将它们部署到该位置。 我已尝试配置Deploy插件的deploy-file目标以更改坐标,但未成功。 作为一个额外的复杂性,项目的主代码模块已被称为myprojectname,因此该组在部署时不为空。但是,由于分类器和类型,不需要覆盖任何内容。

如果没有重命名模块,我可以以某种方式这样做吗?

2 个答案:

答案 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;