【发布时间】:2020-12-03 19:07:58
【问题描述】:
我已经构建了一个 Java 库并将其上传到一个私人 Artifactory 空间。假设该库的 Gradle 标识符为 com.mycompany:MyLibrary:1.0.0,已上传到 https://artifactory.mycompany.com/artifactory/libs-release,并且在 JCenter 中不存在。这个库依赖于另一个库,该库没有上传到https://artifactory.mycompany.com/artifactory/libs-release,但可以从 JCenter 公开获得。假设第二个库的 Gradle 标识符为 com.google.code.findbugs:jsr305:3.0.0。
作为 Java 应用程序中 Java 库的使用者,我的依赖项列表如下:
dependencies {
implementation 'com.mycompany:MyLibrary:1.0.0'
}
值得注意的是,我不需要显式声明 com.google.code.findbugs:jsr305:3.0.0 依赖项,因为它将被传递解析。
另外,为了安全起见,我想在JCenter上面订购我的私有Artifactory仓库,如下:
repositories {
maven {
url 'https://artifactory.mycompany.com/artifactory/libs-release'
}
jcenter()
}
但是,当我尝试构建我的 Java 应用程序时,我遇到了以下错误:
Execution failed for task ':bootJar'.
> Could not resolve all files for configuration ':runtimeClasspath'.
> Could not find jsr305-3.0.0.jar (com.google.code.findbugs:jsr305:3.0.0).
Searched in the following locations:
https://artifactory.mycompany.com/artifactory/libs-release/com/google/code/findbugs/jsr305/3.0.0/jsr305-3.0.0.jar
从这个错误看来,jsr305-3.0.0 工件仅在我的私有 Artifactory 存储库中搜索,而不在 JCenter 中搜索。如果在我的私有 Artifactory 存储库中找不到 jsr305-3.0.0 工件,我本来希望 Gradle 会在 JCenter 中搜索它。
如果我重新排序存储库以便首先声明 JCenter,如下所示...
repositories {
jcenter()
maven {
url 'https://artifactory.mycompany.com/artifactory/libs-release'
}
}
...然后构建成功完成。
Gradle 解决依赖关系的方式是我所遇到的预期行为,还是这是一个错误?如果这是预期的行为,我可以做些什么来更改依赖解析策略,以便我可以在 JCenter 上方声明我的私有 Artifactory 存储库?
【问题讨论】:
标签: gradle artifactory