首页 文章

Jenkins maven将jar部署到nexus - artifact命名

提问于
浏览
6

我的java / maven项目叫做“testproject”,它与我的jenkins和nexus repo联系在一起:

我的pom.xml看起来像:

....    
<distributionManagement>
    <!-- use the following if you're not using a snapshot version. -->
    <repository>
        <id>nexus</id>
        <name>RepositoryProxy</name>
        <url>http://nexus:8080/nexus/content/repositories/releases</url>
    </repository>
    <!-- use the following if you ARE using a snapshot version. -->
    <snapshotRepository>
        <id>nexus</id>
        <name>RepositoryProxy</name>
        <url>http://nexus:8080/nexus/content/repositories/snapshots</url>
    </snapshotRepository>
</distributionManagement>
......

在我的jenkins设置中,我有:

Build - maven3 - clean deploy

正如所料,jenkins将工件上传到jenkins构建的控制台输出的Nexus.Look,如下所示:

[INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ testproject ---
[INFO] Building jar: /var/lib/jenkins/workspace/testproject/target/testproject-0.1-SNAPSHOT.jar
[INFO] 
[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ testproject ---
[INFO] Installing /var/lib/jenkins/workspace/testproject/target/testproject-0.1-SNAPSHOT.jar to /var/lib/jenkins/.m2/repository/com/dummy/testproject/0.1-SNAPSHOT/testproject-0.1-   SNAPSHOT.jar
[INFO] Installing /var/lib/jenkins/workspace/testproject/pom.xml to /var/lib/jenkins/.m2/repository/com/dummy/testproject/0.1-SNAPSHOT/testproject-0.1-SNAPSHOT.pom
[INFO] 
[INFO] --- maven-deploy-plugin:2.5:deploy (default-deploy) @ testproject ---
Downloading: http://nexus:8080/nexus/content/repositories/snapshots/com/dummy/testproject/0.1-SNAPSHOT/maven-metadata.xml
Downloaded: http://nexus:8080/nexus/content/repositories/snapshots/com/dummy/testproject/0.1-SNAPSHOT/maven-metadata.xml (1012 B at 28.2 KB/sec)
Uploading: http://nexus:8080/nexus/content/repositories/snapshots/com/dummy/testproject/0.1-SNAPSHOT/testproject-0.1-20120509.161644-74.jar
Uploaded: http://nexus:8080/nexus/content/repositories/snapshots/com/dummy/testproject/0.1-SNAPSHOT/testproject-0.1-20120509.161644-74.jar (47 KB at 748.5 KB/sec)
Uploading: http://nexus:8080/nexus/content/repositories/snapshots/com/dummy/testproject/0.1-SNAPSHOT/testproject-0.1-20120509.161644-74.pom
Uploaded: http://nexus:8080/nexus/content/repositories/snapshots/com/dummy/testproject/0.1-SNAPSHOT/testproject-0.1-20120509.161644-74.pom (6 KB at 149.3 KB/sec)

Questions are

鉴于我在pom.xml中指定的版本是

<version>0.1-SNAPSHOT</version>
  • 为什么jenkins将testproject- 0.1-20120509.161644-74 .jar上传到Nexus? 20120509.161644-74来自哪里?

  • 如果时间戳 20120509.161644-74 是由jenkins在上传之前生成的,我可以配置它的格式吗?我想要像testproject-01 - $ - $ .jar

3 回答

  • 8

    maven deploy plugin page告诉"By default, when a snapshot version of an artifact is deployed to a repository, a timestamp is suffixed to it" . 因此,当您调用 mvn deploy 时,它是由插件创建的 .

    我不知道你想要的2)是否可能 . 我认为这可能会给maven造成一些麻烦 .

    当您使用具有SNAPSHOT依赖关系的maven时,时间戳用于检查最新版本的SNAPSHOT . 更改快照的格式可能会导致此机制失败 .

  • 2

    自Maven 3以来,时间戳在SNAPSHOT版本中添加 . 使用Maven 2执行时,相同的部署插件不会添加任何时间戳 .

  • 1

    这是Maven锁定快照版本的方式,因此特定版本可以被另一个版本使用 - 它解决了问题,但它有缺点 .

    我带着快照去了房子 . 我相信他们只是邪恶的 . 构建可重复性是一件令人头疼的事情,因为将部署到存储库的带时间戳的快照版本与特定代码提交相关联非常繁琐 .

    保存自己的严重麻烦并让你的构建服务器调用mvn版本:在构建/部署之前,在构建服务器上设置-DnewVersion = .. $ . 使用相同版本标记源代码 . 如果构建失败,则无关紧要,可以将构建配置为刷新工作空间,从而使pom.xml文件的更改无关紧要 .

    使用快照的另一个典型的Maven“问题”是你不确定你的pom在构建期间可能会消耗哪些版本的依赖项,因此请确保你的构建调用依赖:树和依赖:list,在你的其他mvn构建参数之前 . (这将帮助您在传递解析期间识别同一工件的版本不一致 - 我现在在我的构建中的DependencyManagement部分发誓) .

    虽然Maven走了很长的路,但对于持续交付最佳实践来说还不够成熟,但你仍然可以有效地使用它,让你意识到陷阱 .

相关问题