2015-04-22 2 views
21

Вот конфигурация, чтобы получить Artifactory плагин:Gradle 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). Тот же самый. То же самое.

Я сбит с толку ...

ответ

15

Отвечая это в случае, если кто-то имеет тот же вопрос. Проблема заключалась в том, что когда я добавлял различные биты в проект sibling, это означало, что у меня было два проекта, определяющих секцию buildscript {}.

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

По-видимому, это вызвало существование двух разных версий зависимости в пути к классам, следовательно, ошибка.

Решение заключалось в том, чтобы переместить бит buildscript в главный проект, чтобы эти зависимости определялись только один раз.

+2

Я не могу upvote этого достаточно. Просто провел последний час, бросая мне в лицо. Не говоря уже о том, что по этой причине сообщение не было проиндексировано Google. Благодаря!!! – WillBD

+0

Да, я провел почти один день, комментируя строки, и до тех пор, пока я, наконец, не понял это. Очень рад, что смог передать знания! –

+0

смешно. Я вижу это только при работе с jenkins + artifactory plugin, а не на рабочем столе. У них есть сценарий инициализации, и мне интересно, имеет ли он проблему двойного применения. Несомненно, это похоже на дуэльные загрузчики классов –

2

У меня была аналогичная проблема. Кажется, что Gradle пытается дотянуться до конца и сделать некоторую проверку или оценку в разных братьях и сестрах. У меня есть настройки верхнего уровня.gradle с 10 или около того подпроектами.

Исправления для меня было поставить блок buildscript и зависимости на верхнем уровне build.gradle и положить его в каждом из отдельных подпроектов build.gradle файлов, где это необходимо.

Мое предположение о том, что это работает, заключается в том, что плагин загружается в родительский элемент, который будет родительским загрузчиком классов, тогда каждый дочерний проект наследует этот загрузчик классов таким образом, чтобы объявление в нижнем дочернем скрипте использовало класс classloaders и 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 Build Error

Для решения этого раздела Artifactory билда имеет флаг можно будет проверить, указав, что вы хотите использовать версию с Gradle файл:

Flag to fix issue

Это фиксированная моя проблема. Надеюсь, поможет.

1

Вот еще одна потенциальная причина. Все это похоже на проблему с конкурирующими загрузчиками классов, определяющими класс. К полным классам относятся погрузчик. поэтому, load A foo.bar не является загрузчиком B foo.bar и пересекает это разделение - это сложный танец, требующий интерфейсов и тщательного определения.

Итак, при использовании плагина Jenkins artifactory для создания проекта градиента с помощью плагина gradle artifactory вы должны добавить, что usePlugin или jenkins plugin будет генерировать сценарий инициализации, который добавляет плагин gradle к загрузчику классов.

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

Моя проблема была, рабочий стол сборки ОК, Дженкинс построить показывает проблемы этого Поста

Смежные вопросы