Travis CI没有使用pom.xml中提供的额外Maven存储库

时间:2014-09-16 03:12:19

标签: java maven github travis-ci bintray

我有一个基于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下载工件,而不是我指定的仓库。

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

2 个答案:

答案 0 :(得分:5)

从进一步深入研究,我发现Travis使用自己的Maven Central代理,并已配置Maven通过其代理强制所有依赖请求。换句话说,目前似乎不可能使用在Travis上构建的项目的POM文件中指定的其他Maven repos。

在我的情况下,我最终重构,以便项目不需要外部JAR依赖。我也切换到Drone.io,所以我可以在构建服务器上管理我的设置,而不是在我的存储库中携带一个YAML文件(这总是让我觉得有点愚蠢)。

然而,即使在Drone上,管理多个项目之间的依赖关系仍然是一个主要的麻烦(在Java开发中非常常见)。对于Java,我不认为目前有适当的替代Jenkins或Hudson,可能在廉价的Digital Ocean Droplet或其他VPS提供商实例上运行。

答案 1 :(得分:2)

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

cache:
  directories:
  - "$HOME/.m2"
install:
- curl -o $HOME/.m2/settings.xml
  https://raw.githubusercontent.com/trajano/trajano/master/src/site/resources/settings.xml
- mvn dependency:go-offline
script:
- mvn clean install site