当前位置: 首页 > 知识库问答 >
问题:

如何在gradle子项目中使用gradle ArtiFactory插件

顾光明
2023-03-14

我有一个多项目的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" }

共有2个答案

石喜
2023-03-14

当Gradle打印到控制台时:

您没有定义存储库{}块,因此它不知道如何下载声明的依赖项。

吕嘉赐
2023-03-14

虽然我问题中的任务设置不同,但这似乎与另一个SO问题中描述的症状相同。

问题似乎与这样一个事实有关:直到gradle的执行阶段,Artifactory插件才会执行依赖项解析。我曾假设,在带有闭包的getDependencies任务中,将参数定义为zipTree步骤会产生将依赖项解析推迟到该阶段的效果。

但是,为了让复制任务延迟这个过程,我需要将getDependencies任务的from配置定义为一个闭包,并在该闭包中包含zipTree操作。

这是两者之间的区别:

from zipTree { configurations.runtimeDep.singleFile } // doesn't work

...和

from { zipTree( configurations.runtimeDep.singleFile ) } // works

进行此更改可以使解析生效(不需要mavenrepositoriesblock)。

另一个解决方案是完全放弃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