为什么 gradle 在解析依赖项时将依赖项推送到我的 Maven 存储库?

Why does gradle push a dependency to my maven repo while resolving dependencies?

这是我的基本设置:

// Dependencies
repositories {
    maven { url "http://MYREPO.." }
    jcenter()
    mavenLocal()
}

dependencies {
    compile 'org.bytedeco.javacpp-presets:opencv:3.1.0-1.2'
}

根据我对依赖解析如何工作的理解,gradle 应该首先尝试在我的 repo 中寻找依赖,然后在 jcentral() 中,然后在 mavenLocal 中。

相反,我在 ./gradlew assemble:

上得到了这个输出
:compileJava
Download http://MYREPO.../org/bytedeco/javacpp-presets/opencv/3.1.0-1.2/opencv-3.1.0-1.2.jar
:processResources UP-TO-DATE
:classes
:jar UP-TO-DATE
:assemble UP-TO-DATE

BUILD SUCCESSFUL

事实上,当我查看我的存储库以查看发生了什么时,我发现 opencv 依赖项由于依赖项解析而被推送。

我希望工件是从 jcenter 下载的,它实际上存在于那里。

我正在使用 apache archiva。

为什么会这样? 这种行为是否记录在某处? 我不明白这是否是我的存储库设置或 gradle 脚本的问题。

如果你的仓库是中央仓库的镜像,那么会发生什么:

  1. Gradle 尝试从您的存储库中找到依赖项
  2. 你的仓库确实有它,所以它联系它正在镜像的上游仓库
  3. 依赖从上游仓库下载并缓存在你的仓库中
  4. 依赖交给Gradle

这永远不会让 Gradle 有机会尝试直接联系 jcenter :)

对于 Apache Archiva,缓存设置可在 "Proxy Connectors" 下配置并记录在此处:

http://archiva.apache.org/docs/1.4-M4/adminguide/proxy-connectors.html

您基本上可以选择缓存镜像存储库中的工件以供后续请求使用的频率(或根本不缓存)。