我有一个多项目的gradle构建,其中一个子项目是应用Artifactory插件(版本4.2.0),并配置contextUrl和resolve 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.
以下是子项目/包的内容。gradle(工件url/用户/密码属性位于子项目的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"
}
除包装器任务外,根项目生成脚本为空。以下是设置。gradle文件:
include 'subproject'
rootProject.children.each { project -> project.buildFileName = "package.gradle" }
当Gradle打印到控制台时:
您没有定义存储库{}
块,因此它不知道如何下载声明的依赖项。
虽然我问题中的任务设置不同,但这似乎与另一个SO问题中描述的症状相同。
问题似乎与这样一个事实有关:直到gradle的执行阶段,Artifactory插件才会执行依赖项解析。我曾假设,在带有闭包的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问题和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"
}
我有以下多项目分级建设: 3个子项目分级文件中的每一个目前都非常简单: 以下是我想要达到的目标: 当我从父目录运行时,我希望所有三个子项目都使用0.1.5版本生成;因此,、和。但是,当前我的构建已经执行此操作... 如果客户端和共享JAR成功构建,我还希望将它们发布到我的私有Artifactory repo中。(我不希望发布服务器JAR)。 我的问题是:如何将这个片段添加到我的项目中,这样从父目录
多项目Gradle构建中的子项目如何使用根项目的buildSrc文件夹中定义的Gradle插件? 我基本上有: 设置。格拉德尔 buildSrc/src/main/groovy/com/example/conventions/JavaConventionsPlugin。groovy buildSrc/build。格拉德尔 通用/构建。格拉德尔 我正在尝试在项目中应用插件: 但是上面说 id为“co
问题内容: 我正在一个较大的项目中,其中包含许多子项目,这些子项目都是用gradle构建的。通常所有项目都是java项目,因此在主build.gradle脚本中 为所有项目指定。 但是,我需要为项目的某个子树删除插件,或者从插件中明确排除项目。 这里是项目布局的粗略概述 Android / *不需要Java插件。实现此目标的最佳解决方案是什么?注意:我无法更改项目结构。 问题答案: 这应该可以解决
我想在我的所有子项目中使用与gradle的平台的物料清单。http://platform.spring.io/platform/ 文档描述了如何在单个项目中激活bom。需要使用spring-boot插件。我们将使用spring-boot插件,但只在单个子项目中使用。其他项目应该只从bom中获利,但不会包含一个“Main”类来运行spring-boot。 在根文件夹中运行gradle:gradle
设置.分级 Build.Gradle 编辑:要复制,只需克隆repo https://github.com/kic/stackoverflow/tree/master/gradleproblem并在bar目录中尝试
我有一个多项目分级配置,我想添加一个插件到所有子项目和根项目以及。阅读这里的文档似乎很容易: 如果您有一个多项目构建,您可能希望将插件应用于构建中的一些或所有子项目,而不是根项目或主项目。plugins{}块的默认行为是立即解析并应用插件。但是,您可以使用apply false语法告诉Gradle不要将插件应用到当前项目,然后在subprojects块中使用apply plugin:~plugin