我有一个多项目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属性在该subproject的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" }
尽管我的问题中的任务设置不同,但这似乎是与另一个SO问题中描述的症状相同。
该问题似乎与Artifactory插件在gradle的执行阶段之前不会执行依赖项解析有关。我假设使用闭包定义任务zipTree
步骤的参数getDependencies
将具有将依赖关系解析推迟到该阶段的作用。
但是,要让复制任务推迟执行此操作,我需要将任务的from
配置定义getDependencies
为闭包,并zipTree
在该闭包中包含该操作。
两者之间的区别在于:
from zipTree { configurations.runtimeDep.singleFile } // doesn't work
...和
from { zipTree( configurations.runtimeDep.singleFile ) } // works
进行此更改将使解析工作正常(没有必需的mavenrepositories
块)。
另一个解决方案是完全放弃Artifactory配置(在这种情况下,我可以这样做,因为我不需要利用Artifactory特有的任何东西),并使用传统的gradlerepositories
块,如另一个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"
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句