【问题标题】:Travis CI not using extra Maven repository provided in pom.xmlTravis CI 不使用 pom.xml 中提供的额外 Maven 存储库
【发布时间】:2014-11-09 16:34:12
【问题描述】:

我有一个基于 Java 的 GitHub 项目,fitnessjiffy-spring(我目前专注于“bootstrap”分支)。它依赖于从另一个 GitHib 项目 fitnessjiff-etl 构建的库。我正在尝试将这两个配置为由 Travis CI 构建。

不幸的是,Travis 在处理基于 Maven 的 Java 项目方面不如 Jenkins 或 Hudson 成熟。 Jenkins 可以轻松处理项目之间的依赖关系,但 Travis 似乎不存在相同的概念。如果一个项目依赖于另一个项目,那么该其他项目必须已经在之前构建过......并且它的工件上传到某个 Maven 存储库,第一个项目可以稍后下载它。

我的“fitnessjiffy-etl”库正在构建和部署得很好。我正在使用 Bintray 托管 Maven 存储库,您可以在以下位置通过纯 HTTP 清楚地看到我的工件:

http://dl.bintray.com/steve-perkins/maven/

在我的“fitnessjiffy-spring”项目中,我将这个 Maven 存储库位置直接添加到 pom.xml 中,以便 Travis 能够找到该工件依赖项。 Here is the state of my POM at the time of this writing。请注意文件底部的<repositories> 元素。

当我在本地构建这个项目时,它工作得很好。我可以看到它从“http://dl.bintray.com/...”下载了 Maven 工件。但是,当我尝试在 Travis CI 上构建时,它每次都会失败。我可以在控制台日志中看到 Travis 仍在尝试从 Maven Central 下载工件,而不是我指定的 repo。

这对其他人有意义吗?为什么 Maven 在本地构建时会使用 POM 文件中的自定义存储库位置,但在 Travis CI 构建上运行时会忽略此配置?

【问题讨论】:

    标签: java maven github travis-ci bintray


    【解决方案1】:

    通过深入研究,我发现 Travis 使用自己的 Maven Central 代理,并已将 Maven 配置为强制所有依赖请求通过其代理。换句话说,目前似乎无法使用在基于 Travis 的项目的 POM 文件中指定的额外 Maven 存储库。

    就我而言,我最终进行了重构,使项目不需要外部 JAR 依赖项。我还切换到 Drone.io,因此我可以在构建服务器上管理我的设置,而不必在我的存储库中携带 YAML 文件(这总是让我觉得有点愚蠢)。

    然而,即使在 Drone 上,管理多个项目之间的依赖关系仍然是一个主要的麻烦(在 Java 开发中非常常见)。对于 Java,我只是认为目前还没有足够的替代品来替代 Jenkins 或 Hudson,也许可以在廉价的 Digital Ocean droplet 或其他一些 VPS 提供商实例上运行。

    【讨论】:

      【解决方案2】:

      在您的安装阶段添加一个$HOME/.m2/settings.xml 定义您的自定义存储库。

      缓存: 目录: - "$HOME/.m2" 安装: - curl -o $HOME/.m2/settings.xml https://raw.githubusercontent.com/trajano/trajano/master/src/site/resources/settings.xml - mvn 依赖:离线 脚本: - mvn 全新安装站点

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-27
        • 2016-02-17
        • 2016-05-07
        • 2020-12-27
        • 2019-10-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多