2015-04-22 57 views
21

這裏得到artifactory的插件配置:搖籃artifactory的插件說「無法施展對象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... 

我的Gradle運行( 2.3),我得到:

> Failed to apply plugin [id 'com.jfrog.artifactory'] 
    > Cannot cast object 'org.[email protected]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。同樣的一切。

我很困惑...

回答

15

回答這個以防別人有同樣的問題。問題是,當我將各種位添加到兄弟項目時,這意味着我有兩個項目定義了buildscript部分。

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

顯然導致兩個不同版本的依賴性的類路徑中存在,因此錯誤。

解決方案是將buildscript位移動到主項目中,以便這些依賴項只定義一次。

+2

我不能給予好評這還不夠。剛剛在最後一個小時投擲我的臉在這。更何況這篇文章沒有被谷歌索引出於某種原因。謝謝!!! – WillBD

+0

是的,我花了將近一天的時間評論線路,直到我終於明白了。真的很高興我能傳授知識! –

+0

好笑。我只在用jenkins + artifactory插件運行時纔看到這個,而不是在桌面上運行。他們有一個init腳本,我想知道它是否會出現雙重應用問題。當然確實看起來像決鬥類加載器 –

2

我有類似的問題。 Gradle似乎試圖跨越並跨越兄弟姐妹進行一些檢查或評估。我有一個頂級的settings.gradle有10個左右的子項目。

對我來說,修復是把buildscript塊和依賴在頂層的build.gradle 把它放在每個各個子項目的build.gradle文件,在需要的地方。

我的猜測是這個插件的工作原理是,插件被加載到父類中,它將成爲父類加載器,然後每個子項目繼承該類加載器,以便下層子腳本中的聲明使用該類加載器類和CCE不會發生。問題是它們是同一個類,但是不可分配,因爲如果沒有在頂部聲明任何子項目,則每個子項目都使用不同的類加載器。這是Gradle 2.4,並使用IntelliJ 14.

1

如果它幫助某人,我得到了同樣的錯誤,但出於不同的原因。

我在我的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.+" 
} 
0

我在構建Jenkins時遇到了類似的異常。對我來說,衝突是與詹的版本,並在構建腳本版本:

Jenkins Build Error

爲了解決這個構建的Artifactory的部分有您可以檢查指定要使用從該版本的標誌gradle這個文件:

Flag to fix issue

這個固定我的問題。希望能幫助到你。

1

這是另一個潛在的原因。所有這些看起來都是定義類的競爭對手的一個問題。完整的合格類包括加載器。所以,加載一個foo.bar不是加載器B foo.bar並且穿越這個分隔是一個複雜的舞蹈需要接口和仔細的定義。

因此,當使用Jenkins artifactory插件用gradle artifactory插件構建gradle項目時,必須添加usesPlugin或jenkins插件將生成一個將gradle插件添加到類加載器的init腳本。

def server = Artifactory.server "artifactory" 
def rtGradle = Artifactory.newGradleBuild() 
rtGradle.usesPlugin = true // Artifactory plugin already defined in build script 
... 

我的問題是,桌面構建OK,詹金斯打造展示了這個職位的問題