Travis CI 不使用 pom.xml 中提供的额外 Maven 存储库
Posted
技术标签:
【中文标题】Travis CI 不使用 pom.xml 中提供的额外 Maven 存储库【英文标题】:Travis CI not using extra Maven repository provided in pom.xml 【发布时间】: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 构建上运行时会忽略此配置?
【问题讨论】:
【参考方案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
定义您的自定义存储库。
【讨论】:
以上是关于Travis CI 不使用 pom.xml 中提供的额外 Maven 存储库的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 Travis-CI 运行可执行文件-不确定我做错了啥
是否有使用 opencv 和 travis ci 的 c++ 示例项目?