Gradle 神器插件说 "Cannot cast object 'org.jfrog.gradle.plugin.artifactory.dsl.ArtifactoryPluginConvention'..."
Gradle artifactory plugin saying "Cannot cast object 'org.jfrog.gradle.plugin.artifactory.dsl.ArtifactoryPluginConvention'..."
这是获取神器插件的配置:
buildscript {
repositories {
mavenCentral()
maven { url 'http://jcenter.bintray.com' }
}
dependencies {
classpath group:'org.jfrog.buildinfo', name: 'build-info-extractor-gradle', version: '3.0.1'
}
}
apply plugin:'com.jfrog.artifactory'
apply plugin:'ivy-publish'
...some publish spec stuff...
I 运行 gradle (2.3) 我得到:
> Failed to apply plugin [id 'com.jfrog.artifactory']
> Cannot cast object 'org.jfrog.gradle.plugin.artifactory.dsl.ArtifactoryPluginConvention@6b6c7be4' with class 'org.jfrog.gradle.plugin.artifactory.dsl.ArtifactoryPluginConvention' to class 'org.jfrog.gradle.plugin.artifactory.dsl.ArtifactoryPluginConvention'
当然看起来像是一个类路径问题,但我确实有这个项目和一个兄弟项目使用同一组 gradle/artifactory 配置,一个有效,另一个无效。两者都是同一个顶级项目的一部分。相同 JDK (1.8.0_20)。相同 Gradle。一切都一样。
我很困惑...
问题是,当我将各种位添加到兄弟项目时,这意味着我有两个项目定义了 buildscript {} 部分。
buildscript {
...
dependencies {
classpath group:'org.jfrog.buildinfo', name: 'build-info-extractor-gradle', version: '3.0.1'
}
}
显然这导致类路径中存在两个不同版本的依赖项,因此出现错误。
解决方案是将 buildscript 位移动到主项目中,这样这些依赖项只定义一次:
buildscript {
repositories {
maven { url "https://plugins.gradle.org/m2/" }
}
dependencies {
classpath group:'org.jfrog.buildinfo', name: 'build-info-extractor-gradle', version: '3.0.1'
}
}
我遇到了类似的问题。 Gradle 似乎试图跨越兄弟姐妹并进行一些检查或评估。我有一个顶级 settings.gradle,其中包含 10 个左右的子项目。
我的解决方法是将 buildscript 块和依赖项放在顶层 build.gradle 和 把它放在每个单独的子项目 build.gradle 需要的文件。
我猜测这个工作的原因是插件被加载到将成为父 classloader 的父项目中,然后每个子项目继承 classloader 这样的声明在较低的子脚本中使用 classloaders class 并且 CCE 不会发生。问题是它们是相同的 class,但不可分配,因为如果顶部没有声明任何内容,每个子项目的加载器不同 class。这是 Gradle 2.4,使用的是 IntelliJ 14。
万一它对某人有帮助,我得到了同样的错误,但出于不同的原因。
我的 build.gradle
中有以下内容:
dependencies {
classpath "org.jfrog.buildinfo:build-info-extractor-gradle:+"
}
在某些时候,artifactory 插件在构建时将自身从版本 3.x 更新为版本 4.x,因为没有为依赖项指定特定版本。更新后我收到错误 (Could not find any convention object of type ArtifactoryPluginConvention
).
我猜问题是我的构建脚本中的其余配置不适用于新的插件版本。将依赖项设置为使用版本 3.x 为我解决了问题:
dependencies {
classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.+"
}
我在使用 Jenkins 构建时遇到了类似的异常。对我来说,冲突与 Jenkin 的版本和构建脚本中的版本有关:
为了解决这个问题,构建的 Artifactory 部分有一个标志,您可以检查是否指定要使用 gradle 文件中的版本:
这解决了我的问题。希望对你有帮助。
这是另一个潜在原因。所有这些看起来都是定义 class 的竞争对手 classloader 的问题。完全限定的 classes 包括加载器。所以,负载 A foo.bar 不是负载 B foo.bar 并且跨越那个鸿沟是一个复杂的舞蹈,需要接口和仔细定义。
因此,当使用 Jenkins artifactory 插件构建带有 gradle artifactory 插件的 gradle 项目时,您必须添加 usesPlugin,否则 jenkins 插件将生成一个初始化脚本,其中添加 gradle 插件到 class 加载程序。
def server = Artifactory.server "artifactory"
def rtGradle = Artifactory.newGradleBuild()
rtGradle.usesPlugin = true // Artifactory plugin already defined in build script
...
我的问题是,桌面构建正常,jenkins 构建显示了这个 post 的问题
虽然当前接受的答案正确地确定了这个问题的原因,但当您仍然需要能够构建单个子项目时,建议的解决方案不起作用(因为他们当然不再有权访问定义的构建脚本存储库和依赖项)。对我有用的解决方案是在我的每个子项目中都有 相同的 buildscript 块,这似乎是关键。任何变化都会导致原始错误。
我遇到了 bamboo 抛出的相同异常:
'org.jfrog.gradle.plugin.artifactory.dsl.ArtifactoryPluginConvention@18eb2827' with class 'org.jfrog.gradle.plugin.artifactory.dsl.ArtifactoryPluginConvention' to class 'org.jfrog.gradle.plugin.artifactory.dsl.ArtifactoryPluginConvention'
由于 bamboo Bamboo Artifactory 插件默认在每个子项目模块中查找 gradle.propeties 文件,因此必须在那里提供。
不需要在build.gradle文件中发布逻辑,因为Bamboo Artifactory插件会分别读取每个模块的gradle.properties文件,包含:
group=com.example
artifactId=your-project
version=1.0.0
我抛出 ArtifactoryPluginConvention 异常的原因是我在 Bamboo 上配置的构建计划配置错误。
由于配置错误,任务的构建顺序不正确。看看您的 Bamboo 建筑 tasks/preferably 克隆一个已经在运行的 Bamboo 计划。
这是获取神器插件的配置:
buildscript {
repositories {
mavenCentral()
maven { url 'http://jcenter.bintray.com' }
}
dependencies {
classpath group:'org.jfrog.buildinfo', name: 'build-info-extractor-gradle', version: '3.0.1'
}
}
apply plugin:'com.jfrog.artifactory'
apply plugin:'ivy-publish'
...some publish spec stuff...
I 运行 gradle (2.3) 我得到:
> Failed to apply plugin [id 'com.jfrog.artifactory']
> Cannot cast object 'org.jfrog.gradle.plugin.artifactory.dsl.ArtifactoryPluginConvention@6b6c7be4' with class 'org.jfrog.gradle.plugin.artifactory.dsl.ArtifactoryPluginConvention' to class 'org.jfrog.gradle.plugin.artifactory.dsl.ArtifactoryPluginConvention'
当然看起来像是一个类路径问题,但我确实有这个项目和一个兄弟项目使用同一组 gradle/artifactory 配置,一个有效,另一个无效。两者都是同一个顶级项目的一部分。相同 JDK (1.8.0_20)。相同 Gradle。一切都一样。
我很困惑...
问题是,当我将各种位添加到兄弟项目时,这意味着我有两个项目定义了 buildscript {} 部分。
buildscript {
...
dependencies {
classpath group:'org.jfrog.buildinfo', name: 'build-info-extractor-gradle', version: '3.0.1'
}
}
显然这导致类路径中存在两个不同版本的依赖项,因此出现错误。
解决方案是将 buildscript 位移动到主项目中,这样这些依赖项只定义一次:
buildscript {
repositories {
maven { url "https://plugins.gradle.org/m2/" }
}
dependencies {
classpath group:'org.jfrog.buildinfo', name: 'build-info-extractor-gradle', version: '3.0.1'
}
}
我遇到了类似的问题。 Gradle 似乎试图跨越兄弟姐妹并进行一些检查或评估。我有一个顶级 settings.gradle,其中包含 10 个左右的子项目。
我的解决方法是将 buildscript 块和依赖项放在顶层 build.gradle 和 把它放在每个单独的子项目 build.gradle 需要的文件。
我猜测这个工作的原因是插件被加载到将成为父 classloader 的父项目中,然后每个子项目继承 classloader 这样的声明在较低的子脚本中使用 classloaders class 并且 CCE 不会发生。问题是它们是相同的 class,但不可分配,因为如果顶部没有声明任何内容,每个子项目的加载器不同 class。这是 Gradle 2.4,使用的是 IntelliJ 14。
万一它对某人有帮助,我得到了同样的错误,但出于不同的原因。
我的 build.gradle
中有以下内容:
dependencies {
classpath "org.jfrog.buildinfo:build-info-extractor-gradle:+"
}
在某些时候,artifactory 插件在构建时将自身从版本 3.x 更新为版本 4.x,因为没有为依赖项指定特定版本。更新后我收到错误 (Could not find any convention object of type ArtifactoryPluginConvention
).
我猜问题是我的构建脚本中的其余配置不适用于新的插件版本。将依赖项设置为使用版本 3.x 为我解决了问题:
dependencies {
classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.+"
}
我在使用 Jenkins 构建时遇到了类似的异常。对我来说,冲突与 Jenkin 的版本和构建脚本中的版本有关:
为了解决这个问题,构建的 Artifactory 部分有一个标志,您可以检查是否指定要使用 gradle 文件中的版本:
这解决了我的问题。希望对你有帮助。
这是另一个潜在原因。所有这些看起来都是定义 class 的竞争对手 classloader 的问题。完全限定的 classes 包括加载器。所以,负载 A foo.bar 不是负载 B foo.bar 并且跨越那个鸿沟是一个复杂的舞蹈,需要接口和仔细定义。
因此,当使用 Jenkins artifactory 插件构建带有 gradle artifactory 插件的 gradle 项目时,您必须添加 usesPlugin,否则 jenkins 插件将生成一个初始化脚本,其中添加 gradle 插件到 class 加载程序。
def server = Artifactory.server "artifactory"
def rtGradle = Artifactory.newGradleBuild()
rtGradle.usesPlugin = true // Artifactory plugin already defined in build script
...
我的问题是,桌面构建正常,jenkins 构建显示了这个 post 的问题
虽然当前接受的答案正确地确定了这个问题的原因,但当您仍然需要能够构建单个子项目时,建议的解决方案不起作用(因为他们当然不再有权访问定义的构建脚本存储库和依赖项)。对我有用的解决方案是在我的每个子项目中都有 相同的 buildscript 块,这似乎是关键。任何变化都会导致原始错误。
我遇到了 bamboo 抛出的相同异常:
'org.jfrog.gradle.plugin.artifactory.dsl.ArtifactoryPluginConvention@18eb2827' with class 'org.jfrog.gradle.plugin.artifactory.dsl.ArtifactoryPluginConvention' to class 'org.jfrog.gradle.plugin.artifactory.dsl.ArtifactoryPluginConvention'
由于 bamboo Bamboo Artifactory 插件默认在每个子项目模块中查找 gradle.propeties 文件,因此必须在那里提供。
不需要在build.gradle文件中发布逻辑,因为Bamboo Artifactory插件会分别读取每个模块的gradle.properties文件,包含:
group=com.example
artifactId=your-project
version=1.0.0
我抛出 ArtifactoryPluginConvention 异常的原因是我在 Bamboo 上配置的构建计划配置错误。
由于配置错误,任务的构建顺序不正确。看看您的 Bamboo 建筑 tasks/preferably 克隆一个已经在运行的 Bamboo 计划。