Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
让Gradle使用本地maven存储库中的工件_Maven_Gradle - Fatal编程技术网

让Gradle使用本地maven存储库中的工件

让Gradle使用本地maven存储库中的工件,maven,gradle,Maven,Gradle,我想使用maven存储库和本地计算机上的缓存工件,通过避免下载它们来加速Gradle构建 不幸的是,我注意到的是,即使本地存储库列在第一位,并且它具有我需要的依赖关系,Gradle也会在Internet连接可用的情况下从Internet获取工件,并且只会在访问网络存储库时出现问题时才使用本地存储库 下面是一个具体的小例子,再现了这个问题: 构建.渐变: apply plugin: 'java' repositories { maven { name 'cache' url

我想使用maven存储库和本地计算机上的缓存工件,通过避免下载它们来加速Gradle构建

不幸的是,我注意到的是,即使本地存储库列在第一位,并且它具有我需要的依赖关系,Gradle也会在Internet连接可用的情况下从Internet获取工件,并且只会在访问网络存储库时出现问题时才使用本地存储库

下面是一个具体的小例子,再现了这个问题:

构建.渐变

apply plugin: 'java'

repositories {
  maven {
    name 'cache'
    url "/home/vagrant/m2copy"
  }
  jcenter()
}

dependencies {
  compile 'com.google.code.gson:gson:2.4'
}

jar {
  manifest {
    attributes 'Created-By': 'Ekumen'
  }
}
m2copy:
com

m2copy/com:
google

m2copy/com/google:
code

m2copy/com/google/code:
gson

m2copy/com/google/code/gson:
gson

m2copy/com/google/code/gson/gson:
2.4

m2copy/com/google/code/gson/gson/2.4:
gson-2.4.jar
gson-2.4.jar.sha1
_remote.repositories
/home/vagrant/m2copy的内容如下:

apply plugin: 'java'

repositories {
  maven {
    name 'cache'
    url "/home/vagrant/m2copy"
  }
  jcenter()
}

dependencies {
  compile 'com.google.code.gson:gson:2.4'
}

jar {
  manifest {
    attributes 'Created-By': 'Ekumen'
  }
}
m2copy:
com

m2copy/com:
google

m2copy/com/google:
code

m2copy/com/google/code:
gson

m2copy/com/google/code/gson:
gson

m2copy/com/google/code/gson/gson:
2.4

m2copy/com/google/code/gson/gson/2.4:
gson-2.4.jar
gson-2.4.jar.sha1
_remote.repositories
以及渐变构建的输出:

vagrant@vagrant-ubuntu-trusty-64:~/test_cache$ ./gradlew build
:compileJava
Download https://jcenter.bintray.com/com/google/code/gson/gson/2.4/gson-2.4.pom
Download https://jcenter.bintray.com/org/sonatype/oss/oss-parent/9/oss-parent-9.pom
Download https://jcenter.bintray.com/com/google/code/gson/gson/2.4/gson-2.4.jar
:processResources UP-TO-DATE
:classes
:jar
:assemble
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
:check UP-TO-DATE
:build

BUILD SUCCESSFUL

你知道为什么Gradle会跳过本例中的本地存储库,只在无法访问jcenter的情况下使用它吗?

我相信你可能丢失了缓存中的.pom描述符文件以及其他一些.xml描述符。尝试获取依赖项的.pom文件,看看是否有帮助。

尝试将-i添加到构建命令中以获取更多信息。Gradle将告诉您它正试图访问哪些存储库。正是这样。我用来生成本地存储库的机制是省略.pom文件,这将使Gradle将此存储库仅用作备份。