如何在gradle子项目中使用gradle Artifactory插件
我有一个多项目的gradle构建,其中一个子项目正在应用Artifactory插件(版本4.2.0),并配置contextUrl和resolve repoKey 它设置了一个简单的配置和依赖项条目,然后有一个复制任务以将依赖项作为zip文件检索并将其解压缩到目录中如何在gradle子项目中使用gradle Artifactory插件,gradle,artifactory,Gradle,Artifactory,我有一个多项目的gradle构建,其中一个子项目正在应用Artifactory插件(版本4.2.0),并配置contextUrl和resolve repoKey 它设置了一个简单的配置和依赖项条目,然后有一个复制任务以将依赖项作为zip文件检索并将其解压缩到目录中 FAILURE: Build failed with an exception. * Where: Build file 'C:\Users\hoobajoob\project\subproject\package.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.
但是,当复制任务运行时,我得到以下错误。我做错了什么?这是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的内容(artifactoryurl/user/password属性位于subproject的gradle.properties文件中):
除包装器任务外,根项目生成脚本为空。下面是settings.gradle文件:
include 'subproject'
rootProject.children.each { project -> project.buildFileName = "package.gradle" }
当渐变打印到控制台时:
您没有定义
存储库{}
块,因此它不知道如何下载声明的依赖项。虽然我问题中的任务设置不同,但这似乎与中描述的症状相同
这个问题似乎与这样一个事实有关,即Artifactory插件在gradle的执行阶段之前不会执行依赖项解析。我曾假设,在getDependencies
任务中定义zipTree
步骤的参数并使用闭包将产生将依赖项解析推迟到该阶段的效果
但是,为了让复制任务延迟此操作,我需要将getDependencies
任务的from
配置定义为一个闭包,并在该闭包中包含zipTree
操作
这是两者之间的区别:
from zipTree { configurations.runtimeDep.singleFile } // doesn't work
…和
from { zipTree( configurations.runtimeDep.singleFile ) } // works
进行此更改可以使解析生效(不需要mavenrepositories
block)
另一个解决方案是完全删除Artifactory配置(在本例中我可以这样做,因为我不需要使用Artifactory特有的任何东西),并使用传统的gradle存储库
块,如其他SO问题和中所述。这样做可以缩短构建脚本,并且我可以让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"
}
这应该是Artifactory插件的责任。据文件记载,它可以提供对解析和发布的支持,而不需要存储库块。见: