Зависимости плагинов Grails недоступны в приложении

Создал плагин в eclipse GGTS, используя Grails 2.3.8; стандартный плагин, никаких изменений, кроме следующей зависимости (rabbitmq):

//BuildConfig (plugin)
plugins {
   compile(":rabbitmq:1.0.0")
   build(":release:3.0.1",
         ":rest-client-builder:1.0.3")         
}

Зависимости плагинов были обновлены, скомпилированы и упакованы, а затем сохранены в локальном репозитории maven как 'myplugin:mq:0.1' и проверены.

Создал проект Grails, добавил в проект плагин:

//BuildConfig (project)
plugins {            
   build ":tomcat:7.0.52.1"
   compile "myplugin:mq:0.5"  //<-plugin here

   compile ":scaffolding:2.0.3"
   compile ':cache:1.1.2'

   runtime ":database-migration:1.4.0"
   runtime ":jquery:1.11.0.2"     
}

Зависимости успешно обновлены.

Проблема

Я не могу ссылаться на библиотеки rabbitmq или зависимости от плагина rabbitmq от myplugin:mq

Не уверен, почему зависимости не наследуются приложением, я не использую exported = false или что-то еще, чтобы подавить зависимости плагинов.

Пытался

Вместо eclipse я переключился на командную строку (JDK 1.7 + 2.3.8, также пробовал 2.3.7), вручную почистил, обновил, скомпилировал и все еще не могу разрешить классы rabbitmq:

| Error Compilation error: startup failed:
C:\X-projects\ws-ggts_36\rest-api-doc-test\grails-app\controllers\org\raffian\restapi\controller\FundController.
 @ line 8, column 1.
   import org.springframework.amqp.rabbit.core.RabbitAdmin
   ^

Локальное развертывание Maven

Я изменил идентификатор группы и артефакта:

mvn install:install-file  
    -Dfile=grails-test-plugin-0.5.zip
    -DgroupId=myplugin
    -DartifactId=mq
    -Dversion=0.5
    -Dpackaging=zip
    -DgeneratePom=true

Странности пакета плагинов

После более тщательного изучения упакованного плагина ZIP содержит только эти файлы. Я подозреваю, что это проблема, поскольку библиотеки rabbitmq отсутствуют, а plugin.xml или дескриптор плагина не содержат ссылок на зависимости rabbitmq, поэтому приложение даже не знает об этих зависимостях. Но почему плагин не включает свои собственные зависимости?

введите здесь описание изображения

Дескриптор плагина

class TestPluginGrailsPlugin {
    // the plugin version
    def version = "0.5"
    // the version or versions of Grails the plugin is designed for
    def grailsVersion = "2.3 > *"
    // resources that are excluded from plugin packaging
    def pluginExcludes = [
        "grails-app/views/error.gsp"
    ]

    def title = "Test Plugin Plugin" // Headline display name of the plugin
    def author = "Your name"
    def authorEmail = ""
    def description = 'desc'
    def documentation = "http://grails.org/plugin/test-plugin"
    def doWithWebDescriptor = { xml ->}
    def doWithSpring = {}
    def doWithDynamicMethods = { ctx -> }
    def doWithApplicationContext = { ctx -> }
    def onChange = { event -> }
    def onConfigChange = { event -> }
    def onShutdown = { event -> }
}

person raffian    schedule 31.10.2014    source источник
comment
Вы узнали, связана ли проблема с затмением или приложением. Попробуйте скомпилировать приложение вне GGTS и посмотреть, жалуется ли оно на то, что зависимости rabbitmq не найдены.   -  person dmahapatro    schedule 31.10.2014
comment
По умолчанию групповой идентификатор плагина равен org.grails.plugin. Вы изменили groupId для своего плагина? compile "myplugin:mq:0.1". Можете ли вы также добавить дескриптор плагина к вопросу?   -  person dmahapatro    schedule 31.10.2014
comment
вопрос обновлен; Я попытался изменить groupId и artifactId в дескрипторе, похоже, это не повлияло на выходной файл плагина, но я использую maven для развертывания в локальном репо (см. Выше), чтобы заставить myplugin:mq   -  person raffian    schedule 31.10.2014
comment
Вы пытались вместо этого использовать команду grails maven-install из плагина выпуска?   -  person dmahapatro    schedule 31.10.2014
comment
ZIP-файл плагина не будет включать двоичные файлы, но также не будет включать информацию о зависимостях. Это хранится в файле .pom. Пока я печатал это, @dmahaptatro подсказал, что я собираюсь сделать - использовать maven-install, а в приложении использовать compile ":test-plugin:0.5"   -  person Burt Beckwith    schedule 31.10.2014
comment
@BurtBeckwith, могу ли я переопределить groupId и artifactId в дескрипторе? я не предпочитаю использовать имена Grails по умолчанию для артефакта плагина   -  person raffian    schedule 31.10.2014
comment
@dmahapatro Ага, вот и все, grails maven-install, мой отказ от именования по умолчанию, вероятно, также усугубил проблему. Опубликовать как ответ, я приму, спасибо за помощь (тоже спасибо, Берт!)   -  person raffian    schedule 31.10.2014


Ответы (1)


Чтобы опубликовать подключаемый модуль Grails в локальном репозитории maven, используйте команду:

grails maven-install

from release plugin, который по умолчанию доступен для всех вновь созданных плагинов Grails.

Наконец, вот как вы можете изменить groupId плагина, если это необходимо.

person dmahapatro    schedule 31.10.2014