如何在部署阶段设置战争名称到 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】:

您不需要为此添加插件。只需像这样将属性&lt;finalName&gt; 添加到&lt;build&gt;..&lt;/build&gt;

<build>
    <finalName>example-en-$build.name</finalName>
    ......
</build>

【讨论】:

无效...!!你的意思是说目标目录中没有创建战争文件(example-en-.war)?在这种情况下,请在使用我提到的属性构建项目时添加控制台日志。 finalName 不影响 maven:deploy 的设置。为此,您需要使用 maven-deploy-plugin 覆盖配置

以上是关于如何在部署阶段设置战争名称到 Nexus 存储库?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 Maven 1 部署到 Nexus 存储库?

如何使用 Maven 从 Nexus 下载进行部署

从 nexus 获取最新的构建工件

当它有父pom时如何正确地将工件部署到nexus?

如何 npm 发布到 Nexus 组存储库?

部署原型工件时,Nexus Maven 原型存储库未更新