我有一个基于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构建上运行时忽略此配置?
答案 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