10

我有一个基于 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 能够找到该工件依赖项。 这是撰写本文时我的 POM 的状态。注意<repositories>文件底部的元素。

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

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

4

2 回答 2

6

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

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

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

于 2014-09-23T18:30:47.863 回答
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 全新安装站点
于 2016-11-19T14:48:07.410 回答