java - Maven 无法拉取对 travis-ci : Connection timed out 的依赖

标签 java maven testing continuous-integration travis-ci

在设置我的项目以使用 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)。

有多种方法可以解决这个问题:

  1. 下载一个包含所有依赖项的 jasperreports 库版本,将其放在代码库的 lib/ 文件夹中,并让 maven 从那里加载它们
  2. 让 Travis 在测试时下载并提取 jasperreports 库及其所有依赖项的存档(以免污染您的代码库)
  3. 在您自己的服务器上镜像 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/

相关文章:

java - CentOS 7中通过jenkins构建时如何设置JRE和JDK的正确路径?

Maven原型(prototype)包构建

testing - 免费的基于网络的测试用例管理软件

javascript - sahi - 动态表

java - 未注入(inject) Arquillian 的显式本地 EJB

java - 当应用程序崩溃时,Android App SharedPreferences 会被删除吗?

java - 使用身份验证 cookie 打开 WebSocket 连接

java - 替换字符串中的多个子字符串

java - HashMap 通过 SOAP 从 Java 到 PHP 再返回

java - 我如何获得一个完全解析的 pom 文件模型?