在设置我的项目以使用 travis 之后,我遇到了一个特殊的问题:在完全随机的情况下,由于 maven 无法提取所有依赖项,构建失败。
问题似乎与this question类似,因为没有被拉出的主要依赖是 jasperreports。但是即使我将他们的 repo 添加到我的 pom 文件后问题仍然存在(这对我来说似乎是不好的做法,如果我错了请纠正我)。
例如,参见 this build .它失败了,但没有理由失败,因为在它通过之前的提交,并且更改肯定不会导致失败。它甚至以不同的方式失败(不同的依赖项无法下载)。
我还注意到,测试失败不遵循任何模式:有时构建通过,有时仅在其中一个 JDK 上失败,并且经常在两个 JDK 上都失败。
有没有人对如何解决这个问题有任何建议或想法?这是我这边的问题(maven/travis 的配置)还是服务器端(网络?)的问题?
这是错误的摘录:
[ERROR] Failed to execute goal on project carcv-webapp: Could not resolve dependencies for project org.carcv.webapp:carcv-webapp:war:1.0.0.Beta1-SNAPSHOT:
Failed to collect dependencies at net.sf.jasperreports:jasperreports:jar:5.2.0 -> com.lowagie:itext:jar:2.1.7.js2:
Failed to read artifact descriptor for com.lowagie:itext:jar:2.1.7.js2:
Could not transfer artifact com.lowagie:itext:pom:2.1.7.js2 from/to jasperreports (http://jasperreports.sourceforge.net/maven2):
Connection to http://jasperreports.sourceforge.net refused: Connection timed out -> [Help 1]
最佳答案
问题似乎是网络问题,或者更确切地说,是负载管理问题。 Maven 似乎不喜欢 jasperreports 存储库的响应方式 - 对于最后几个构建,它会挂起并且构建会超时(see here)。
有多种方法可以解决这个问题:
- 下载一个包含所有依赖项的 jasperreports 库版本,将其放在代码库的
lib/
文件夹中,并让 maven 从那里加载它们 - 让 Travis 在测试时下载并提取 jasperreports 库及其所有依赖项的存档(以免污染您的代码库)
- 在您自己的服务器上镜像 jasperreports maven 存储库
我最喜欢第三种方法,所以我决定创建一个小的 bash 脚本:
#!/bin/bash
export DIR=$HOME/temp_jasper/
export TARGET=$HOME/jasper-mirror/
mkdir $DIR
cd $DIR
wget -r --page-requisites --convert-links --no-parent http://jasperreports.sourceforge.net/maven2/
mkdir $TARGET
mv $DIR/jasperreports.sourceforge.net/* $TARGET
安排一个 cron 作业来每天/每周/每月/手动(任何你想要的)完成工作。
我使用 httpd cartridge created by Stefano Zanella 创建了一个 OpenShift 应用程序,在本地运行脚本获取文件,添加到git仓库的根目录,并推送。您可以实时查看存储库文件 here .
之后,更改 pom 文件中的 jasperreports 存储库:
<repositories>
<!-- Own mirror of jasperreport's repository
Original: http://jasperreports.sourceforge.net/maven2/ -->
<repository>
<id>jasperreports-mirror</id>
<url>http://httpd-oskopek.rhcloud.com/maven2/</url>
</repository>
</repositories>
提交、推送并看到构建变绿。
关于java - Maven 无法拉取对 travis-ci : Connection timed out 的依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20298954/