Gradle artifactory插件说“无法投射对象”

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (49)

下面是获得工件插件的配置:

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...

我运行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/Artify配置,其中一个是工作的,另一个则不行。两者都是同一个顶级项目的一部分。相同的JDK(1.8.0)_20)。

提问于
用户回答回答于

如果其他人有同样的问题,回答这个问题。问题是,当我将各种位添加到兄弟项目时,这意味着我有两个项目定义了buildscript{}节。

buildscript {
    ...
    dependencies {
        classpath group:'org.jfrog.buildinfo', name: 'build-info-extractor-gradle', version: '3.0.1'
    }
}

显然,这导致了类路径中存在两个不同版本的依赖关系,因此出现了错误。

解决方案是将buildscript位移动到主项目中,以便只定义一次依赖项。

用户回答回答于

Gradle似乎试图跨越并在兄弟姐妹之间做一些检查或评估。

我有一个最高级别的设置,有10个左右的子项目。我的修正是将buildscript块和依赖项放在顶层build.gradle在需要时,将其放入每个子项目build.gradle文件中。我猜这是因为插件被加载到父类加载器中,然后每个子项目都继承了类加载器,这样下子脚本中的声明就不会使用类加载器类和CCE。问题是,它们是同一个类,但是不能分配,因为如果在顶部没有声明,则每个子项目都有不同的类加载器。这是Gradle 2.4,使用IntelliJ 14。

扫码关注云+社区