如何在部署阶段设置战争名称到 Nexus 存储库?
Posted
技术标签:
【中文标题】如何在部署阶段设置战争名称到 Nexus 存储库?【英文标题】:How to set war name on deploy phase to Nexus repository? 【发布时间】:2014-09-25 12:32:50 【问题描述】:我有用于存储 Nexus 快照的快照存储库。构建管道由 Jenkins 和构建作业组成。此构建作业的目的是将工件(war 文件)部署到 nexus。一切正常,但我想重命名输出战争。战争文件名的结构如下:
artifactName-version-date.anynumbers-anynumber.war
(example-1.0.1-20140925-120156-3.war)
我尝试在构建配置中使用 maven-war-plugin 设置战争名称。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<warName>$build.name</warName>
</configuration>
</plugin>
所需的战争名称应采用格式,例如example-en-1.0.1-20140925-120156-3.war1
,其中 en 是构建配置文件。属性 build.name
设置为值 example-en
。但此配置被忽略,war 文件仍以不合需要的格式存储到 Nexus。
当我查看构建日志时,有关于成功将战争文件上传到 Nexus 存储库的日志,并且战争文件的名称不好。所以不知道哪里配置错了。
Maven 命令是mvn clean deploy -P en
编辑:
这是控制台日志的一部分,其中example-en.war
被复制到詹金斯工作区。这是正确的,但在最后一步上传了不同文件名的war文件。
[INFO]
[INFO] --- maven-war-plugin:2.0.2:war (default-war) @ example ---
[INFO] Exploding webapp...
[INFO] Assembling webapp example in /var/lib/jenkins/workspace/build/example/target/example-sk
[INFO] Copy webapp webResources to /var/lib/jenkins/workspace/build/example/target/example-sk
[INFO] Generating war /var/lib/jenkins/workspace/build/example/target/example-sk.war
[INFO] Building war: /var/lib/jenkins/workspace/build/example/target/example-sk.war
[INFO]
[INFO] --- maven-install-plugin:2.3:install (default-install) @ example ---
[INFO] Installing /var/lib/jenkins/workspace/build/example/target/example-sk.war to /var/lib/jenkins/.m2/repository/com/example/example/1.0.1-SNAPSHOT/example-1.0.1-SNAPSHOT.war
[INFO] Installing /var/lib/jenkins/workspace/build/example/pom.xml to /var/lib/jenkins/.m2/repository/com/example/example/1.0.1-SNAPSHOT/example-1.0.1-SNAPSHOT.pom
[INFO]
[INFO] --- maven-deploy-plugin:2.7:deploy (default-deploy) @ example ---
Downloading: http://127.0.0.1:8082/nexus/content/repositories/example-snapshots/com/example/example/1.0.1-SNAPSHOT/maven-metadata.xml
774/774 B
Downloaded: http://127.0.0.1:8082/nexus/content/repositories/example-snapshots/com/example/example/1.0.1-SNAPSHOT/maven-metadata.xml (774 B at 3.4 KB/sec)
Uploading: http://127.0.0.1:8082/nexus/content/repositories/example-snapshots/com/example/example/1.0.1-SNAPSHOT/example-1.0.1-20140925.120156-3.war
【问题讨论】:
首先你为什么喜欢像engine-en-1.0-SNAPSHOT.war1
那样改变目标名称?本地存储库中的安装看起来像example-1.0.1-SNAPSHOT.war
?为什么要将名称更改为whatever.war1
?此外,您不能更改存储库管理器中使用的名称。我不明白的是你为什么要改名字?
因为不同配置文件的每个构建都会创建不同的战争,我想改变这些战争。例如engine-en-1.0-SNAPSHOT.war1、engine-de-1.0-SNAPSHOT.war1、engine-es-1.0-SNAPSHOT.war1。现在没有任何相关信息。
【参考方案1】:
我认为您应该查看 Nexus 存储库设置。您是否尝试过手动上传任何内容?您会看到无论文件名是什么,在您将其上传到 Nexus 存储库后,它都可以以“$artifactId-$version-$classifier.$packaging”的形式下载
很遗憾,我现在无法访问 Nexus,也无法检查是否可以将其设置为保留名称。
第二种方法是将标签设置为所需的格式(因为它接受变量 $),这将是 Nexus 命名约定的解决方法(如果我没记错的话,将变量放在版本部分被认为已弃用)。
【讨论】:
【参考方案2】:您不需要为此添加插件。只需像这样将属性<finalName>
添加到<build>..</build>
<build>
<finalName>example-en-$build.name</finalName>
......
</build>
【讨论】:
无效...!!你的意思是说目标目录中没有创建战争文件(example-en-以上是关于如何在部署阶段设置战争名称到 Nexus 存储库?的主要内容,如果未能解决你的问题,请参考以下文章