Gradle将缓存一个8MB的jar,但不会缓存32MB的jar

时间:2014-02-28 21:38:25

标签: java gradle

我有一个构建我从Maven转移到Gradle。到目前为止,事情并没有太糟糕,说实话,我很可能是Gradle。

这就是我遇到的问题,而且文档还有很多帮助。我有两个我的代码依赖的内部jar。我们打电话给一个核心'和其他测试'。他们来自另一个内部团队,Maven存储库是我们内部的。他们是大型罐子:'核心'是8MB和'测试'是32MB的大小。我所依赖的所有外部罐子都不是问题。在您提出要求之前,我的存储库和依赖关系定义都很好,gradle不会抱怨并且可以很好地找到所有内容。这是他们的后代:

repositories {
    mavenCentral()
    maven {
      url { 'http://internal.host.com/path/to/repo/root/' }
    }
}

dependencies {
    compile group: 'io.dropwizard', name: 'dropwizard.core', version: dropwizardVersion
    // And so on

    // This is the 8MB jar that I need at compile and runtime
    compile group: 'corp.group.id', name: 'core', version: currentVersion

    // This is the 32MB jar that I need for my tests, and which Gradle insists on 
    // caching the pom.xml ONLY, and downloading the jar on demand.
    testCompile group: 'corp.group.id', name: 'tests', version: currentVersion
} 

在这一点上,我只是试图让日食变得越来越糟糕。生成有效的.classpath文件,我可以使用它来处理这个代码库并按摩它进行编译。这是踢球者。生成的.classpath文件没有对tests-version.jar文件的任何引用。 Gradle已经愉快地下载了POM并缓存了它,但它每次感觉需要时都会不断重新下载它。 core-version.jar文件只下载一次(如预期的那样)并缓存,并显示在生成的.classpath文件中。

我似乎找不到任何会告诉Gradle&#34的文档;只要将缓存罐放在缓存中,无论如何,请。不,真的,我不在乎该死的东西有多大,每次下载都要好。"

1 个答案:

答案 0 :(得分:1)

回答你自己的问题可能是不好的形式,但我想留下一个后代的记录,万一其他人遇到这个问题。

尚未解决的问题是Nexus 2.3.0服务器无法完全发送整个jar。当请求jar(通过curl,wget,Gradle,Maven)靠近服务器并且下载速率明显更高时,一切正常。但是当我从远程位置(Sunnyvale到多伦多)进行此操作并且速率从15M / s到1.2M / s或更低时,Nexus由于某种原因未能发送最后一位。转移需要多长时间并不重要。我看到它在18到35秒之间变化。截止的数据量也有所不同,从5176字节到34876字节。

这里具有挑战性的事情是Gradle没有表明下载实际上以任何形式失败。使用--info或--debug没有帮助。没有错误消息说服务器提前终止连接。

当我们完全解决这个问题时,我会更新这个答案。

编辑:虽然它开始看起来像网络问题而不是Nexus服务器错误,但仍然没有解决这个问题。就错误消息而言,这确实在完全重建〜/ .gradle(资源名称显然被遮挡)时飞过:

Forcing close on abandoned resource: Http GET Resource: http://corp.server.com/nexus/content/repositories/repo-name/gid/aid/version-number/artifact.jar