嗨:我发现 maven 默认部署更改文件名以匹配版本+工件 ID。例如
部署一个 jar 文件,artifact=A 和 version=V-0.1 将生成一个名为 AV-0.1.jar 的 jar 文件。
有没有办法在部署中更改 jar 文件的默认名称,以便它不会连接这些字段或明确指定最终部署的 jar 名称?
嗨:我发现 maven 默认部署更改文件名以匹配版本+工件 ID。例如
部署一个 jar 文件,artifact=A 和 version=V-0.1 将生成一个名为 AV-0.1.jar 的 jar 文件。
有没有办法在部署中更改 jar 文件的默认名称,以便它不会连接这些字段或明确指定最终部署的 jar 名称?
对此的复杂答案:是的
这有点棘手,你需要小心,因为 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}
将在您的工件存储中留下许多许多版本...)
对此的简单回答是:不。
其背后的问题是,如果您更改命名模式,则无法在存储库中找到工件。这就是具有固定命名模式的原因。
使用 curl 命令行似乎可以为 Nexus 提供任何你想要的东西。
curl -u<deploymentUser>:<deploymentPassword> --upload-file <someLocalFile> -v http://<nexusServerDNSName>/nexus/content/repositories/<repoPath>/<fileName>
对我来说,它非常有效。很棒的是它可以在没有 pom.xml 的情况下工作。
更新:这个答案可能对搜索如何绕过 Maven 概念并将任意命名文件部署到 Nexus 的人有用。如果问题是如何使用 Maven 来做到这一点,那么我会同意“不可能”的答案。
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