15

嗨:我发现 maven 默认部署更改文件名以匹配版本+工件 ID。例如

部署一个 jar 文件,artifact=A 和 version=V-0.1 将生成一个名为 AV-0.1.jar 的 jar 文件。

有没有办法在部署中更改 jar 文件的默认名称,以便它不会连接这些字段或明确指定最终部署的 jar 名称?

4

4 回答 4

7

对此的复杂答案:是的

这有点棘手,你需要小心,因为 pom 不会被重写。因此,只有 maven 远程存储库(artifactory 或 nexus)会将其放入正确的文件夹结构中。

如果在maven deploy目标中覆盖deploy-file目标,可以覆盖参数:http ://maven.apache.org/plugins/maven-deploy-plugin/deploy-file-mojo.html

一个总是将版本 4.5.1 发布到 nexus 的示例如下所示:

        <plugin>
            <artifactId>maven-deploy-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>deploy-file</goal>
                    </goals>
                    <phase>deploy</phase>
                    <configuration>
                        <repositoryId>nexus-site</repositoryId>
                        <url>http://nexus.some.where/nexus-2/content/repositories/releases</url>
                        <file>${build.directory}/${project.build.finalName}.${project.packaging}</file>
                        <generatePom>false</generatePom>
                        <pomFile>pom.xml</pomFile>
                        <version>4.5.1</version>
                    </configuration>
                </execution>
            </executions>
        </plugin>

(在有人问之前,做这样的事情的一个原因是让构建更加 CI 友好。在 CI 中,一切都只是一个构建号,没有真正的“构建发布”,每次签入都会产生一个生产就绪的工件. 因此,通过将 4.5.1 替换为${BUILD_NUMBER}将在您的工件存储中留下许多许多版本...)

于 2014-05-30T15:38:36.233 回答
2

对此的简单回答是:不。

其背后的问题是,如果您更改命名模式,则无法在存储库中找到工件。这就是具有固定命名模式的原因。

于 2013-06-10T14:31:24.127 回答
2

使用 curl 命令行似乎可以为 Nexus 提供任何你想要的东西。

curl -u<deploymentUser>:<deploymentPassword> --upload-file <someLocalFile> -v http://<nexusServerDNSName>/nexus/content/repositories/<repoPath>/<fileName>
  • deploymentUserdeploymentPassword应该取自 ~/.m2/settings.xml。
  • someLocalFile是你要部署的文件(绝对路径)
  • fileName是您希望在远程存储库中看到的任意名称(此处不得遵循任何命名约定)

对我来说,它非常有效。很棒的是它可以在没有 pom.xml 的情况下工作。

更新:这个答案可能对搜索如何绕过 Maven 概念并将任意命名文件部署到 Nexus 的人有用。如果问题是如何使用 Maven 来做到这一点,那么我会同意“不可能”的答案。

于 2018-04-20T10:36:25.737 回答
1

mvn deploy:deploy-file -DartifactId=AAA -Dversion=VVV -Dpackaging=jar

上面的命令会将文件放置在以下结构中。

AAA
-VVV
--AAA_VVV.jar

如果您只是想让创建的文件的名称在连续推送到工件之间有所不同,您可以使用 -Dpackaging 参数。IE。将值设置为当前时间戳

mvn deploy:deploy-file -DartifactId=AAA -Dversion=VVV -Dpackaging=2017_01_31_01_37.jar

AAA
-VVV
--AAA_VVV.jar
--AAA_VVV2017_01_31_01_37.jar
于 2017-01-31T10:38:46.380 回答