我有一个多项目gradle构建,其中一个子项目正在应用Artifactory插件(版本4.2.0),并配置contextUrl并解析repoKey。
它设置一个简单的配置和依赖项,然后有一个复制任务来将依赖项检索为zip文件并将其解压缩到一个目录中。
但是,当复制任务运行时,我会收到以下错误。我究竟做错了什么?这是Artifactory插件或gradle,还是......?
的问题问题似乎与这是否是子项目无关。如果我删除多项目配置并从子项目目录运行任务,我会收到同样的错误。
FAILURE: Build failed with an exception.
* Where:
Build file 'C:\Users\hoobajoob\project\subproject\package.gradle' line: 36
* What went wrong:
A problem occurred evaluating project ':subproject'.
> Could not resolve all dependencies for configuration ':subproject:runtimeDep'.
> Cannot resolve external dependency company.com:artifact-id:1.0.0 because no repositories are defined.
以下是subproject / package.gradle的内容(Artifactory url / user / password属性位于子项目的gradle.properties文件中):
plugins {
id "com.jfrog.artifactory" version "4.2.0"
}
artifactory {
contextUrl = "${artifactory_contextUrl}"
resolve {
repository {
username = "${artifactory_user}"
password = "${artifactory_password}"
repoKey = 'some-repo'
}
}
}
configurations {
runtimeDep
}
dependencies {
runtimeDep 'company.com:artifact-id:1.0.0@zip'
}
ext.destination = null
task getDependencies(type: Copy) {
from zipTree { configurations.runtimeDep.singleFile }
into ".artifacts/runtime"
}
除了包装器任务之外,根项目构建脚本是空的。以下是settings.gradle文件:
include 'subproject'
rootProject.children.each { project -> project.buildFileName = "package.gradle" }
答案 0 :(得分:0)
当Gradle打印到控制台时:
您没有定义repositories{}
块,因此它不知道如何下载声明的依赖项。
答案 1 :(得分:0)
虽然我的问题中的任务设置不同,但这似乎与this other SO question中描述的症状相同。
问题似乎与Artifactory插件在gradle的执行阶段之前不会执行依赖项解析的事实有关。我假设使用闭包定义zipTree
任务中getDependencies
步骤的参数会产生将依赖性解析推迟到该阶段的效果。
但是,为了使复制任务延迟,我需要将from
任务的getDependencies
配置定义为闭包,并在该闭包中包含zipTree
操作
区别在于:
from zipTree { configurations.runtimeDep.singleFile } // doesn't work
...和
from { zipTree( configurations.runtimeDep.singleFile ) } // works
进行此更改可使解析工作(没有必需的maven repositories
阻止)。
另一个解决方案是完全删除Artifactory配置(在这种情况下我可以做,因为我不需要使用Artifactory独有的任何东西)并使用传统的gradle repositories
块,如另一个SO中所述问题和crazyjavahacking。这样做会缩短构建脚本,我可以按照原来编写的那样配置zipTree步骤:
repositories {
maven {
url "${artifactory_contextUrl}/repo-key"
}
}
configurations {
runtimeDep
}
dependencies {
runtimeDep 'company.com:artifact-id:1.0.0@zip'
}
ext.destination = null
task getDependencies(type: Copy) {
from zipTree { configurations.runtimeDep.singleFile }
into ".artifacts/runtime"
}