2014-03-20 8 views
0

В моем Grails 2.3.5 файл дескриптора плагина, я пытаюсь получить имя плагина или имя приложения, в зависимости от того, работает ли он как обычное приложение Grails или если плагин запускается сам по себе. С последним у меня проблемы.Grails 2.3.x: Как получить имя плагина при запуске плагина?

Я попытался следующие внутри doWithSpring закрытия:

application.metadata.getApplicationName() 
application.metadata['app.name'] 
appName 
application.config.appName 
this.plugin.name 

все из которых являются либо нулевой или пустой карте.

У меня такое чувство, что мне нужно как-то получить доступ к текущему GrailsPlugin или GrailsPluginUtils, но я пока не добился определенного прогресса.

+0

* работает плагин сам по себе * - Что это значит? – dmahapatro

+0

cd myGrailsPlugin; grails run-app – nickdos

+0

получил. Должен ли использоваться контейнер, такой как tomcat? убедитесь, что он не экспортируется с помощью плагина. – dmahapatro

ответ

1

Вы можете попробовать использовать это в дескрипторе плагина.

import grails.util.Holders 

.... 

def doWithSpring = { 
    //gives plugin name while using through app 
    def appName = manager.getGrailsPluginForClassName(this.class.simpleName).name 

    //gives plugin project name 
    def name = Holders.config.grails.plugin.myplugin.name 
} 

Изменения в Config.groovy

grails.plugin.myplugin.name=appName 

Эта запись конфигурации не должны загрязнять, когда плагин используется через приложение. Вы получили бы пустую карту для name выше, когда плагин запускается через приложение.

+0

Это дает мне appName, но в неправильном формате. Он возвращает версию camelCase (myPlugin), но мне действительно нужно имя проекта, которое вы видите для контекстного пути, когда вы используете 'grails run-app' в консоли. Например. 'Сервер работает. Перейдите по адресу http: // localhost: 8080/my-plugin/'. – nickdos

+0

@nickdos Посмотрите мое обновление выше. – dmahapatro

+0

В 'Config.groovy',' appName' по-прежнему 'null'.Кроме того, возможно, я что-то пропустил, но эти изменения, похоже, полагаются на жесткое кодирование значения myplugin. В этом случае я могу просто жестко закодировать строковое значение ('my-plugin'), где это необходимо в дескрипторе плагина. Мой первоначальный вариант использования должен был определить имя, чтобы, если плагин был переименован, код будет продолжать работать. – nickdos

0

@ Ответ dmahapatro дал мне желаемый результат, поэтому я пометил его ответ как правильный.

Но основная проблема, с которой я столкнулся, на самом деле связана с отсутствующим атрибутом в application.properties - app.name. Поэтому я извлек соответствующую информацию из комментариев и поместил их в этот ответ для дальнейшего использования.

Я превратил приложение Grails в плагин, используя очень полезные направления от Берт Беквит на Converting Grails Applications to Plugins and vice versa. В ней он говорит:

удалить все из application.properties кроме имущества app.grails.version

Это причина, почему моя оригинальная попытка с application.metadata.getApplicationName() возвращается нуль.

Добавление app.name обратно в application.properties, это исправил, так что application.metadata.getApplicationName() дал мне значение мне нужно.

Кто-то отметил это упущение в комментариях к блогу, но Берт не обновил статью или ответил на комментарий, так что я не могу категорически сказать, что вы должны добавить app.name для каждого плагина, только то, что он работал на меня в этот экземпляр (YMMV).

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