2

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

由于历史原因,这个打包模块被称为bundle,所以工件最终被称为mygroup:bundle并因此被归类在 Nexus 中。

我宁愿让它们出现在 下mygroup:myprojectname,但我不知道如何将它们部署到该位置。我尝试配置 Deploy 插件的deploy-file目标以更改坐标,但没有成功。作为一个额外的复杂因素,项目的主要代码模块已经被调用myprojectname,因此该组在部署时不是空的。不过,多亏了分类器和类型,什么都不需要被覆盖。

没有重命名模块,我可以以某种方式做到这一点吗?

4

2 回答 2

10

部署插件具有所有必要的功能:
您可以在其配置中设置 G/A/V 坐标,并将任意数量的附加工件部署到您想要的任何坐标。但是,它不会自动部署到您distributionManagement部分中给出的存储库 URL。

为了避免重复,我最后求助于 GMaven 插件,用它来检查项目版本(是否-SNAPSHOTdistributionManagement.

这是两个插件的配置:

          <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>

           <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-deploy-plugin</artifactId>
            <version>2.7</version>
            <configuration>
                <skip>true</skip>
            </configuration>
            <executions>
                <execution>
                    <id>deploy-myclassifier</id>
                    <phase>deploy</phase>
                    <goals>
                        <goal>deploy-file</goal>
                    </goals>
                    <configuration>
                        <file>
                            ${project.build.directory}/${project.artifactId}-${project.version}-myclassifier.zip
                        </file>
                        <groupId>${project.groupId}</groupId>
                        <artifactId>myprojectname</artifactId>
                        <version>${project.version}</version>
                        <classifier>myclassifier</classifier>
                        <repositoryId>nexus</repositoryId>
                        <url>http://url-to-nexus</url>
                    </configuration>
                </execution>
            </executions>
        </plugin>
于 2012-11-29T10:24:15.013 回答
2

在 maven-deploy-plugin 中,您可以提供存储库 url 和 id,如下所示:

<repositoryId>${targetrepositoryid}</repositoryId>
<url>${targetrepository}</url>

因此,类似于project.distributionManagement.repository.url,您也可以定义project.properties.targetrepositoryid = project.distributionManagement.snapshotRepository.id;

于 2014-11-06T13:59:43.973 回答