2015-04-22 12 views
21

Ecco la configurazione per ottenere il plugin Artifactory:Gradle Artifactory plug dicendo "non può lanciare oggetto '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... 

corro Gradle (2.3) e ottengo:

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

appare certamente come un problema di percorso di classe, ma mi hanno letteralmente questo progetto e un progetto di pari livello usando la stessa serie di Gradle/configurazioni Artifactory e si lavora e l'altro no. Entrambi fanno parte dello stesso progetto di alto livello. Same JDK (1.8.0_20). Lo stesso Gradle. Lo stesso tutto.

Sono sconcertato ...

risposta

15

Rispondere a questa nel caso in cui qualcun altro ha lo stesso problema. Il problema era che quando ho aggiunto i vari bit al progetto fratello, significava che avevo due progetti che definivano la sezione buildscript {}.

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

Apparentemente questo ha causato l'esistenza di due diverse versioni della dipendenza nel classpath, quindi l'errore.

La soluzione era spostare il bit di buildscript nel progetto principale in modo che tali dipendenze vengano definite una sola volta.

+2

Non posso upvote questo basta. Ho passato l'ultima ora a gettare la mia faccia a questo. Per non parlare di questo post non è stato indicizzato da Google per qualche motivo. Grazie!!! – WillBD

+0

Sì, ho passato quasi un giorno a commentare le battute in entrata e in uscita finché non l'ho finalmente capito. Davvero contento di poter trasmettere la conoscenza! –

+0

divertente. Lo vedo solo quando è in esecuzione con il plugin jenkins + artifactory e non sul desktop. Hanno uno script di init e mi chiedo se faccia il doppio problema. Sicuramente sembra un duellare i classloader –

2

Ho avuto un problema simile. Gradle sembra cercare di raggiungere e fare qualche controllo o valutazione tra fratelli. Ho un livello.setle di livello superiore con circa 10 sottoprogetti.

La correzione per me è stato quello di mettere il blocco buildscript e le dipendenze al livello più alto build.gradle e metterlo in ciascuno dei singoli sottoprogetti build.gradle file dove necessario.

La mia ipotesi sul motivo per cui questo funziona è che il plug-in venga caricato nel genitore che sarà un programma di caricamento genitore genitore, quindi ogni progetto figlio erediterà quel classloader in modo tale che la dichiarazione nello script figlio inferiore usi quella classe classloaders e CCE non avviene. Il problema è che sono della stessa classe, ma non sono assegnabili poiché i diversi classloader per sottoprogetto se non viene dichiarato nulla in alto. Questo era il Gradle 2.4 e l'uso di IntelliJ 14.

1

Nel caso in cui aiuti qualcuno, ho ricevuto lo stesso errore, ma per un motivo diverso.

ho avuto il seguente nel mio build.gradle:

dependencies { 
    classpath "org.jfrog.buildinfo:build-info-extractor-gradle:+" 
} 

Ad un certo punto il plugin Artifactory stesso aggiornato dalla versione 3.x alla versione 4.x, mentre la costruzione, perché nessuna versione specifica è stato specificato per la dipendenza. Dopo l'aggiornamento ho ricevuto l'errore (Could not find any convention object of type ArtifactoryPluginConvention).

Immagino che il problema è che il resto della configurazione nel mio script di build non funziona con la nuova versione del plugin. Impostare la dipendenza utilizzare la versione 3.x risolto il problema per me:

dependencies { 
    classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.+" 
} 
0

mi è stato sempre un'eccezione simile quando si costruisce con Jenkins.Per me il conflitto era con la versione di Jenkin e la versione in script di build:

Jenkins Build Error

Per affrontare questa sezione Artifactory della costruzione ha una bandiera è possibile controllare specificando che si desidera utilizzare la versione dal File Gradle:

Flag to fix issue

Questo risolto il mio problema. Spero che sia d'aiuto.

1

Ecco un'altra potenziale causa. Tutto ciò sembra essere un problema con i classloader rivali che definiscono la classe. Le classi complete includono il caricatore. quindi, caricare A foo.bar non è caricatore B foo.bar e attraversare quella divisione è una danza complessa che richiede interfacce e un'attenta definizione.

Quindi, quando si utilizza il plugin artifactory di Jenkins per creare il progetto gradle con il plugin gradle artifactory, è necessario aggiungere il plugs di usePlugin o jenkins genererà uno script di init che aggiunge il plugin gradle a un programma di caricamento classi.

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

Il mio problema era, desktop accumulo OK, Jenkins costruire spettacoli di questo post problema