Gradle artifactory plugin disant "Ne peut pas lancer objet' org.jfrog.gradle.plugin.artifactory.DSL.ArtifactoryPluginConvention"…"

Voici la configuration pour obtenir le plugin artifactory:

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

j'exécute gradle (2.3) et j'obtiens:

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

cela ressemble certainement à un problème de classpath, mais j'ai littéralement ce projet et un projet frère utilisant ce même ensemble de configurations Grad/artifactory et l'un fonctionne et l'autre ne fonctionne pas. Tous deux font partie du même projet de haut niveau. Même JDK (1.8.0_20). Même Gradle. Même tout.

je suis perplexe...

25
demandé sur Chris Kessel 2015-04-22 22:59:21

5 réponses

le problème était que lorsque j'ai ajouté les divers bits au projet frère, cela signifiait que j'avais deux projets définissant la section buildscript {}.

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

apparemment cela a causé l'existence de deux versions différentes de la dépendance dans classpath, d'où l'erreur.

la solution était de déplacer le bit buildscript dans le projet maître pour que ces dépendances ne soient définies qu'une seule fois:

buildscript {
    repositories {
        maven { url "https://plugins.gradle.org/m2/" }
    }
    dependencies {
        classpath group:'org.jfrog.buildinfo', name: 'build-info-extractor-gradle', version: '3.0.1'
    }
}
18
répondu Chris Kessel 2018-08-23 10:44:52

Voici une autre cause potentielle. Tout cela semble être un problème avec les classloaders rivaux définissant la classe. Les classes complètes qualifiées comprennent le chargeur. donc, chargez un foo.bar n'est pas loader B foo.bar and crossing that divide est une danse complexe qui exige des interfaces et une définition soignée.

donc, si vous utilisez le plugin artificiel de Jenkins pour construire votre projet gradle avec le plugin artificiel de gradle, vous devez ajouter le plugin usesPlugin ou jenkins générera un init script qui ajoute le plugin gradle à un chargeur de classe.

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

mon problème était, la construction du bureau OK, la construction de jenkins montre le problème de ce post

3
répondu Peter Kahn 2017-10-05 20:47:38

j'ai eu un problème similaire. Gradle semble essayer de tendre la main et de faire un peu de vérification ou d'évaluation parmi les frères et sœurs. J'ai un haut niveau de paramètres.Grad avec une dizaine de sous-projets.

la solution pour moi était de mettre le bloc buildscript et les dépendances au niveau supérieur de la construction.gradle et mettre dans chacun des sous-projets de construction.fichiers Grad le cas échéant.

je suppose que la raison pour laquelle cela fonctionne est que le plugin obtient chargé dans le parent qui sera un parent classloader, alors chaque projet enfant hérite de ce classloader de telle sorte que la déclaration dans le script enfant inférieur utilise que classloaders class et CCE ne se produisent pas. Le problème est qu'ils sont de la même classe, mais non assignable puisque les différents classloaders par sous-projet si rien n'est déclaré au sommet. C'était Gradle 2.4, et en utilisant IntelliJ 14.

2
répondu Randy 2015-11-05 20:59:17

Dans le cas où il aide quelqu'un, j'ai eu la même erreur, mais pour une raison différente.

j'ai eu de la suite dans mon build.gradle:

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

a un moment donné le plugin artifactory s'est mis à jour à partir de la version 3.x à la version 4.x lors de la construction, parce qu'aucune version spécifique n'a été spécifiée pour la dépendance. Après la mise à jour j'ai obtenu l'erreur (Could not find any convention object of type ArtifactoryPluginConvention).

je suppose que le problème est que le reste de la configuration dans mon script de construction ne fonctionne pas avec le nouveau version plugin. Définition de la dépendance pour utiliser la version 3.x résolu le problème pour moi:

dependencies {
    classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.+"
}
1
répondu avivr 2016-04-06 15:37:53

j'ai eu une exception similaire en construisant avec Jenkins. Pour moi, le conflit était avec Jenkin version et la version du script de compilation:

Jenkins Build Error

pour y remédier, la section Artifactory de la compilation a un flag que vous pouvez vérifier en spécifiant que vous voulez utiliser la version à partir du fichier gradle:

Flag to fix issue

Cela a réglé mon problème. Espérons que cela aide.

1
répondu nwallman 2017-09-25 01:08:47