【问题标题】:Grails Plugin Get Plugin's Root or Installed DirectoryGrails Plugin 获取插件的根目录或安装目录
【发布时间】: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/

在我的插件项目中,我需要创建一个文件。它需要在我的插件中,因为我正在编写的文件需要引用我的插件提供的其他文件。我尝试过的一些没有奏效的事情是:

  1. System.properties['base.dir']
  2. new File("")
  3. 在插件中的 groovy 脚本中,您可以简单地引用 pluginNamePluginDir,但我正在尝试从 POGO 访问它。
  4. 查看所有System.properties 都没有插件目录
  5. grailsApplication 似乎也不包含此类信息。

非常感谢任何帮助。

【问题讨论】:

    标签: grails grails-plugin


    【解决方案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。有什么想法吗?我是否需要配置一些东西才能使描述符可用?感谢您的帮助!
    • 我最终使用了这样的东西:stackoverflow.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
    猜你喜欢
    • 2023-04-06
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 2011-01-31
    相关资源
    最近更新 更多