【问题标题】:How to set war name on deploy phase to Nexus repository?如何在部署阶段设置战争名称到 Nexus 存储库?
【发布时间】:2023-03-17 13:55:01
【问题描述】:

我有用于存储 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。现在没有任何相关信息。

标签: maven jenkins nexus


【解决方案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 覆盖配置
    猜你喜欢
    • 1970-01-01
    • 2012-11-28
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 2011-02-10
    • 2013-05-31
    相关资源
    最近更新 更多