Maven无法依赖travis-ci:连接超时

时间:2013-11-30 10:07:47

标签: java maven testing continuous-integration travis-ci

在设置我的项目以使用travis后,我遇到了一个特殊的问题:在完全随机的情况下,由于maven无法提取所有依赖项,构建失败。

这个问题似乎与this question类似,因为主要的依赖性没有得到提升是jasperreports。但是,即使我将他们的回购添加到我的pom文件中之后问题仍然存在(对我来说这似乎是不好的做法,如果我错了,请纠正我。)

例如,请参阅this build。它失败了,但没有理由,因为在它通过之前的提交,并且改变不应该导致确定失败。它甚至失败了不同(具有不同的依赖关系,无法下载)。

我还注意到测试失败没有遵循任何模式:有时构建会通过,有时它只会在其中一个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]

1 个答案:

答案 0 :(得分:0)

问题似乎是网络问题,或者更确切地说是负载管理问题。 Maven似乎不喜欢jasperreports存储库响应的方式 - 对于最后几个构建,它只会挂起并且构建会超时(see here)。

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

  1. 下载包含所有依赖项的jasperreports库版本,将其放在代码库中的lib/文件夹中,并让maven从那里加载
  2. 让Travis在测试时下载并提取jasperreports库的存档及其所有依赖项(为了不污染您的代码库)
  3. 在您自己的服务器上镜像jasperreports maven存储库
  4. 我最喜欢第三种方法,所以我决定创建一个小的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>
    

    提交,推送并看到构建变为绿色。