2012-02-10 3 views
5

Я пишу плагин, и я пытаюсь написать файл внутри корневого каталога или установочного каталога плагина (не уверен, к чему это относится). Я не могу понять, как это удержать. Выполнение System.properties['base.dir'] приведет к созданию корневого каталога проекта Grails. Так что сейчас у меня есть две директории:Плагин Grails Получить корневой каталог или установленный каталог плагинов

C:/PluginProject/

C:/GrailsAppThatUsesPlugin/

Это мое понимание того, что, когда это становится распределенным плагин пользователю будет так же иметь две директории:

GRAILS_HOME/Grails-версия/проекты/Projectname/плагины/MyPlugin/

C:/GrailsAppThatUsesPlugin/

Внутри моего проекта плагина мне нужно создать файл. Он должен быть внутри моего плагина, потому что файл, который я пишу, должен ссылаться на другие файлы, которые предоставляет мой плагин. Несколько вещей, которые я пробовал, не работал, являются:

  1. System.properties['base.dir']
  2. new File("")
  3. В заводной сценария в виде плагина вы можете просто сослаться на pluginNamePluginDir, но я пытаюсь получить доступ к этому от ПОГО.
  4. Глядя на все System.properties, ни один из них не имеет каталога плагинов
  5. grailsApplication, похоже, не содержит этого типа информации.

Любая помощь очень ценится.

ответ

3

Вы можете использовать это:

import org.codehaus.groovy.grails.plugins.PluginManagerHolder 

def pluginManager = PluginManagerHolder.pluginManager 
def plugin = pluginManager.getGrailsPlugin(pluginName) 
def pluginDir = plugin.descriptor.file.parentFile 

Имя плагина должен иметь вид 'spring-security-core', не 'springSecurityCore'

+0

Я положил этот код в тест, и 'plugin.descriptor' всегда имеет значение null. «Плагин» не равен нулю. Также, если я делаю 'plugin.getPluginDir()', который бросает NPE. Есть предположения? Нужно ли мне настраивать что-то, чтобы дескриптор был доступен? Спасибо за вашу помощь! –

+0

В итоге я использовал что-то вроде этого: http://stackoverflow.com/questions/1163093/how-do-you-get-the-path-the-running-script-in-groovy. Это дало мне путь, который я искал. Я смог использовать PluginManagerHolder для получения другой информации, в которой я нуждался. Спасибо, Берт! –

11

Это работало для меня (как на месте и обычные плагины):

import org.codehaus.groovy.grails.plugins.GrailsPluginUtils 

GrailsPluginUtils.pluginInfos.find { it.name == pluginName }.pluginDir 
+4

Спасибо. Я использую этот способ, чтобы избежать операции поиска: 'org.codehaus.groovy.grails.plugins.GrailsPluginUtils.getPluginDirForName (pluginName) .file.absolutePath' – rodvlopes

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