Загрузить класс приложения из плагина - PullRequest
0 голосов
/ 22 мая 2009

В плагине Grails 1.1 я пытаюсь загрузить класс из основного приложения, используя следующий код:

class MyClass {
  static Map getCustomConfig(String configName){
    return new ConfigSlurper().
      parse(ApplicationHolder.application.classLoader.loadClass(configName))                    
  }
}

Где configName - это имя класса в $MAIN_APP/grails-app/conf, содержащее информацию о конфигурации. Однако, когда приведенный выше код выполняется внутри модульного теста, applicationHolder.application возвращает ноль, в результате чего приведенный выше метод выдает NullPointerException. Для этой проблемы была создана проблема Grails JIRA , но она помечена как исправленная, несмотря на то, что проблема, похоже, все еще существует.

Я знаю, что в классе дескриптора плагина я могу получить доступ к основному приложению (экземпляр GrailsApplication) через неявную переменную application. Но приведенный выше код отсутствует в дескрипторе плагина.

Есть ли способ, которым я могу загрузить класс из основного приложения внутри плагина (но вне дескриптора плагина)?

Спасибо, Дон

1 Ответ

0 голосов
/ 26 мая 2009

Оказывается, есть 2 возможных ответа.

Правильный ответ

GrailsApplication недоступно в модульных тестах, поэтому для работы приведенного выше кода это должен быть интеграционный тест

Взлом, который работает

Изменение

parse(ApplicationHolder.application.classLoader.loadClass(configName))

до

parse(MyClass.classLoader.loadClass(configName))
...