2012-02-10 72 views
5

我正在编写一个插件,我正在尝试在插件的根目录或已安装的目录(不确定要引用此目录)中编写一个文件。我似乎无法弄清楚如何获得这个价值。执行System.properties['base.dir']将导致实现Grails项目的根目录。所以现在我有两个目录:Grails Plugin获取插件的根目录或已安装的目录

C:/ PluginProject/

C:/ GrailsAppThatUsesPlugin/

这是我的理解是,当这成为一个分布式的插件,用户将同样有两个目录:

GRAILS_HOME/Grails的版本/项目/项目名称/插件/为myplugin/

C:/ GrailsAppThatUsesPlugin/

我的插件项目中需要创建一个文件。它需要在我的插件里面,因为我正在写的文件需要引用我的插件提供的其他文件。这都没有奏效,我已经试过几件事情:

  1. System.properties['base.dir']
  2. new File("")
  3. 在插件中Groovy脚本,你可以简单地参考pluginNamePluginDir,但我想访问此来自POGO。
  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'总是空的。 'plugin'不是null。另外如果我做'plugin.getPluginDir()'抛出一个NPE。有什么想法吗?我是否需要配置描述符可用的内容?谢谢你的帮助! – 2012-02-13 14:28:13

+0

我结束了使用这样的东西:http://stackoverflow.com/questions/1163093/how-do-you-get-the-path-the-running-script-in-groovy。它为我带来了我期待的道路。我能够使用PluginManagerHolder获取我需要的其他信息。谢谢Burt! – 2012-02-13 20:43:52

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 2013-07-15 14:24:06