Grails Plugin 获取插件的根目录或安装目录
Posted
技术标签:
【中文标题】Grails Plugin 获取插件的根目录或安装目录【英文标题】:Grails Plugin Get Plugin's Root or Installed Directory 【发布时间】:2012-03-03 09:33:12 【问题描述】:我正在编写一个插件,我正在尝试在插件的根目录或安装目录中编写一个文件(不知道该引用什么)。我似乎无法弄清楚如何获得这个值。执行System.properties['base.dir']
将导致执行Grails 项目的根目录。所以现在我有两个目录:
C:/PluginProject/
C:/GrailsAppThatUsesPlugin/
据我了解,当它成为分布式插件时,用户同样会有两个目录:
GRAILS_HOME/grails-version/projects/projectName/plugins/myPlugin/
C:/GrailsAppThatUsesPlugin/
在我的插件项目中,我需要创建一个文件。它需要在我的插件中,因为我正在编写的文件需要引用我的插件提供的其他文件。我尝试过的一些没有奏效的事情是:
System.properties['base.dir']
new File("")
在插件中的 groovy 脚本中,您可以简单地引用 pluginNamePluginDir
,但我正在尝试从 POGO 访问它。
查看所有System.properties
都没有插件目录
grailsApplication 似乎也不包含此类信息。
非常感谢任何帮助。
【问题讨论】:
【参考方案1】:你可以用这个:
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'
【讨论】:
我将此代码放入测试中,plugin.descriptor
始终为空。 plugin
不为空。另外,如果我执行plugin.getPluginDir()
会引发 NPE。有什么想法吗?我是否需要配置一些东西才能使描述符可用?感谢您的帮助!
我最终使用了这样的东西:***.com/questions/1163093/…。它让我找到了我正在寻找的道路。我能够使用 PluginManagerHolder 来获取我需要的其他信息。谢谢伯特!【参考方案2】:
这对我有用(就地插件和常规插件):
import org.codehaus.groovy.grails.plugins.GrailsPluginUtils
GrailsPluginUtils.pluginInfos.find it.name == pluginName .pluginDir
【讨论】:
谢谢。我正在使用这种方式来避免查找操作:org.codehaus.groovy.grails.plugins.GrailsPluginUtils.getPluginDirForName(pluginName).file.absolutePath
以上是关于Grails Plugin 获取插件的根目录或安装目录的主要内容,如果未能解决你的问题,请参考以下文章