创建和安装 grails 插件 - 在安装期间/安装后,我的插件如何从依赖的插件访问资源?

Posted

技术标签:

【中文标题】创建和安装 grails 插件 - 在安装期间/安装后,我的插件如何从依赖的插件访问资源?【英文标题】:Creating and installing a grails plugin - how does my plugin access resources from a plugin its dependent upon during/after install? 【发布时间】:2013-02-23 07:13:12 【问题描述】:

这个问题是我在这里发布的另一个问题的延伸:

In Grails 2, how do you includeTargets from Gant scripts from a plugin your app is dependent upon?

我正在编写一个 grails 插件,它是我公司特定版本的 shiro 插件,例如。我的公司四郎。我在 BuildConfig.groovy 中将 shiro 设置为我的插件的依赖项,如下所示:

plugins compile(":shiro:1.1.4")

我打包插件并尝试将其安装到一个名为 foo 的新 grails 应用程序中:

foo> grails install-plugin ../my-company-shiro/grails-my-company-shiro-01.zip

没问题。 现在,我想在 foo 中运行一个脚本,它是 my-company-shiro 的一部分,它又引用了来自 shiro 插件的脚本:

foo>grails create-auth-controller

我得到以下失败:

Error Error executing script CreateAuthController: No such property: shiroPluginDir for class: .....

这发生在我正在执行的脚本之一尝试访问 shiro 的脚本之一,如下所示:

includeTargets << new File (shiroPluginDir, "/scripts/_ShiroInternal.groovy")

当我编译我的插件时这个参考有效,但当我在另一个 grails 应用程序中安装它时不在这里。

我是否在 BuildConfig.groovy 中错误地设置了依赖项,以至于 shiro 的文件没有包含在我的插件中,因此我无法引用它?

shiro 插件显示在我的 .grails 缓存 my-compnay-shiro/plugins/shiro-1.1.4 中 当我将 my-company-shiro 插件安装到 foo 时,在 .grails 缓存 foo/plugins/my-company-shiro-0.1/dependencies.groovy 和 plugin.xml 文件中引用 shiro。我在这里没有看到任何 shiro 的脚本或文件,但我不知道它们是否应该被复制到这里。

在安装时对 shiroPlugin 的引用是否不正确?

提前致谢!

【问题讨论】:

但是错误说没有这样的属性:shiroPluginDir。我很困惑:S 当我打包插件 b/c 时,shiroPluginDir 属性是可见的,我将 shiro 设置为插件依赖项。当我将插件安装到项目中时,我假设 shiro 插件也已安装,并且默认情况下该属性是可见的(ala 引用问题的答案)。 请注意,当我在我安装插件的应用程序上列出插件时,列出了 my-company-shiro,但没有列出 shiro。因此,如果没有安装 shiro,我可能无法引用默认的 PluginDir。那么此时如何访问 shiro 脚本呢? 请发布有此问题的脚本。 【参考方案1】:

grails install-plugin 已弃用,您需要改用BuildConfig.groovy。我这里测试过,在app里面声明了自定义插件就可以了,你可以使用grails.plugin.location来指定你的插件所在的文件夹。

考虑到一个名为 shiro-test 的插件,BuildConfig 应该是:

grails.project.dependency.resolution = 
   ...
   legacyResolve true // whether to do a secondary resolve on plugin installation, not advised and here for backwards compatibility
   ...


grails.plugin.location."shiro-test" = "path/to/plugin"

然后你刷新你的依赖并可以从shiro-test运行任何脚本。

【讨论】:

是的,这行得通。现在似乎很明显,我只是没有想到更新 BuildConfig.groovy 时需要编译周期。

以上是关于创建和安装 grails 插件 - 在安装期间/安装后,我的插件如何从依赖的插件访问资源?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 grails 中实现表单构建器插件

什么是 Grails 插件?安装插件是什么意思?

grails 3插件安装位置

如何设置 grails 插件的安装位置?

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

Grails 无法安装插件