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 获取插件的根目录或安装目录的主要内容,如果未能解决你的问题,请参考以下文章

从 zip 文件安装 grails 插件的正确方法是啥?

我应该在 grails 2.0 中使用哪个贝宝/支付插件?

Grails 3 - 资源插件

由于未解决的依赖关系,grails install plugin blazeds 失败

如何安全地更新 grails 插件

发布 Grails 插件