Grails Plugin Получить корневой плагин или установленный каталог - PullRequest
6 голосов
/ 11 февраля 2012

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

C: / PluginProject /

C: / GrailsAppThatUsesPlugin /

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

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

C: / GrailsAppThatUsesPlugin /

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

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

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

Ответы [ 2 ]

12 голосов
/ 06 августа 2012

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

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

GrailsPluginUtils.pluginInfos.find { it.name == pluginName }.pluginDir
4 голосов
/ 11 февраля 2012

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

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'

...