【问题标题】:Jenkins builds not honoring third party repositories?詹金斯构建不尊重第三方存储库?
【发布时间】:2012-01-16 08:16:38
【问题描述】:

我在我的网络 nexus 实例上托管 ojdbc14.jar,但似乎只有本地构建通过。

我的 pom 中有这个:

  <repositories>
    <repository>
        <releases>
            <enabled>true</enabled>
            <updatePolicy>always</updatePolicy>
            <checksumPolicy>warn</checksumPolicy>
        </releases>
        <id>thirdparty</id>
        <url>http://server/nexus/content/repositories/thirdparty</url>
    </repository>
  </repositories>

完成删除 ~/.m2/ 后,本地 mvn package 将在 nexus 上找到 ojdbc14.jar。相反,我的 jenkins 构建始终失败:

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal 
org.csodehaus.mojo:sql-maven-plugin:1.3:execute (sql-ddl) on project mongo-dbunit: Execution 
sql-ddl of goal org.codehaus.mojo:sql-maven-plugin:1.3:execute failed: Plugin 
org.codehaus.mojo:sql-maven-plugin:1.3 or one of its dependencies could not be resolved: Could not find artifact com.oracle:ojdbc14:jar:10.2.0.4.0 in central 

为什么?

(http://repo1.maven.org/maven2)

【问题讨论】:

    标签: maven maven-2 jenkins pom.xml


    【解决方案1】:

    在你做任何事情之前,安装Config File Provider Plugin

    那么,

    1. 转到 Jenkins 根页面
    2. 选择“管理 Jenkins”
    3. 选择“配置文件”
    4. 选择类型“Maven settings.xml 文件”
    5. 将其命名为“custom-maven-settings”,然后剪切并粘贴 ~/.m2/settings.xml 文件的内容

    现在回到你的 Maven2/3 工作。

    1. Build 部分单击Advanced 按钮
    2. Maven Settings Configs 下拉框中选择custom-maven-settings

    此设置适用于我们的自定义存储库。

    【讨论】:

    • 有没有办法在POM中严格做到这一点?如果不是,maven比我想象的还要可怕。包括 developers 但不包括在哪里解决依赖关系?你一定是在开玩笑吧。
    • @Stefan。您是否在独立环境 settings.xml 中配置了 &lt;repositories&gt; 部分?如果你这样做,你可以在你的帖子中剪切并粘贴它。另一方面,您的构建是否在 Jenkins 环境之外失败。如果没有,那么 Jenkins 有实现问题不是 Maven 的错。顺便说一句,在我看来,Hudson 是一个更好的 Maven 构建平台。
    • @AlexanderPogrebnyak:说真的?哈德森几乎死了,陷入了赞助困境,而詹金斯却非常积极地发展。就在几个月前,他们还是同一个项目。
    • @Daniel。您和我的意见可能会有所不同。
    • @AlexanderPogrebnyak:我选择了-1,因为您没有处理实际的 Maven 问题,而是建议使用不同的工具。回想起来,这可能有点苛刻,我很抱歉。至于意见:意见很好,但如果你能用一些真实的事实来支持你的意见会更好。
    【解决方案2】:

    您的 POM 中有 &lt;repositories&gt; 部分,但没有 &lt;pluginRepositories&gt;。 Maven 过去对编译时工件依赖项和插件依赖项之间的区别比较草率,但在较新版本的 Maven 中,它们是完全独立的。

    正如其他人所指出的,通过在 Jenkins 之外的命令行运行 Maven 可能更容易解决此问题。仅仅在与您通常开发的机器不同的机器上进行构建通常会暴露出很多问题。

    这里有一些 documentation on the POM 可能有用也可能没用。

    【讨论】:

    • 插件可以来自repo1,没关系。我只需要从第三方托管的 repo 中解析 odjbc jar。
    • @StefanKendall: 嗯...所以您希望插件来自与其依赖项不同的地方?我从来没有尝试过。您可以通过在&lt;plugin&gt; 标记内放置&lt;dependencies&gt; 标记来覆盖插件的依赖关系。
    • @StefanKendall:也许你遇到了MNG-3384:“插件中定义的存储库用于下载依赖项”。您使用的是哪个版本的 Maven?这种行为(表面上)在 Maven 3 中得到修复,它清除了许多长期存在的传递依赖问题。
    • 不幸的是,我正在构建一个 maven2 开源项目,所以我很累。我可以在构建期间检查设置文件并关闭它,但这很愚蠢。这一切只是作为一个练习,向我展示了 gradle 到底有多好。
    【解决方案3】:

    我会检查并确保两台机器上的 Maven 设置相同。

    Jenkins 默认使用 $HOME/.m2/settings.xml 中的文件。 Jenkins 作业也可以覆盖此默认值。

    【讨论】:

      猜你喜欢
      • 2014-03-13
      • 2020-07-04
      • 2016-07-16
      • 2014-07-18
      • 2012-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多