【问题标题】:How to deploy artifact with maven when i only got the final .jar?当我只有最终的 .jar 时,如何使用 maven 部署工件?
【发布时间】:2012-10-25 10:59:05
【问题描述】:

我有一个 jenkins 构建管道,其中第一个作业调用 mvn clean package 来编译和构建我的 java 项目。该工件随后被复制到一堆测试作业中,以确保我的构建质量。链中的最后一个作业应该将工件部署到我的 nexus 存储库。

我现在的问题是,当我只有带有 maven 的最终 jar myproject-1.2.0-SNAPSHOT.jar 时,如何将文件部署到 nexus?

我试过了

mvn deploy:deploy-file

但是这个插件需要获取关于 groupId、artifact id、版本等的信息。我不想在我的部署作业中知道这些信息。 jar中的信息不是存储在某些maven文件中吗? 我只想说nexus,这里有神器,拿去吧。

【问题讨论】:

  • Jenkins 具有部署到存储库的内置功能 - 使用它,不要重新发明轮子。
  • 我建议考虑将其更改为单个作业并让 Maven 构建和打包工件,让 Maven 测试工件(如果这需要一段时间,请使用集成测试阶段)然后如果一切顺利,让 Jenkins 部署工件。您可以使用 Maven 进行部署,但通常最好让 Jenkins 在确定工作中的所有内容都已成功完成后进行部署。

标签: java maven deployment nexus


【解决方案1】:

使用 Maven 构建的 jar 在 META-INF/maven/ 目录中包含此信息。在META-INF/maven/[groupId]/[artifactId]/pom.xml 下可以找到完整的pom.xml 文件。

所以你可以做的是编写一个小程序来提取这些信息并使用正确的参数调用mvn deploy:deploy-file

不幸的是,你必须知道groupIdartifactId才能获取文件,所以你不能轻易打开和解析它。但是当然你可以得到META-INF/maven 中的(唯一的)目录的名称和这个目录的(唯一的)子目录的名称。这有点麻烦,但应该可以。

注意: 还有一个pom.properties 文件包含最重要的信息,它可能比pom.xml 更容易解析。

【讨论】:

    【解决方案2】:

    在我看来,这一切都倒退了。我会将流程更改为

    1. 运行 mvn clean deploy 以将库部署到存储库管理器(Nexus 左右)或本地存储库(如果您有多个构建节点则不太理想)
    2. 让测试作业从存储库中获取工件作为依赖项(或脚本 wget 或其他)
    3. 你已经完成了..

    【讨论】:

      【解决方案3】:

      使用你用来生成 jar 文件的 pom.xml 文件。将该文件保留为工件的一部分,当您需要手动部署时,可以使用它

      【讨论】:

        猜你喜欢
        • 2012-06-27
        • 2011-05-13
        • 2011-02-11
        • 1970-01-01
        • 1970-01-01
        • 2016-10-07
        • 2014-05-22
        • 1970-01-01
        相关资源
        最近更新 更多