0

我正在开发一个供内部使用的 Grails 2.2.3 插件,我希望在插件中配置我在每个应用程序中使用的安全设置。Spring Security 配置、Spring Security LDAP 配置以及自定义 UserDetails 类和 UserDetailsContextMapper 类。

我已经处理了所有这些,但我遇到的问题是我无法让依赖项在插件中正常工作。如果应用程序使用插件声明spring-security-corespring-security-ldap在其插件依赖项中,它工作正常,但应用程序不应该声明这个依赖项 - 插件应该处理它。

那么如何让这个插件正确安装和使用spring-security-corespring-security-ldap插件呢?这是我在插件中的 BuildConfig.groovy 文件:

    plugins {
        compile ":spring-security-core:1.2.7.3"
        compile ":spring-security-ldap:1.0.6"
        //Putting this in the app USING the plugin makes it work fine.
    }
4

1 回答 1

2

plugins块是正确的。如果它在从 zip 安装后无法正常工作,则您可能会从以前留下一些杂物。

为了把东西放在一个地方,我喜欢删除

grails.project.class.dir = "target/classes"
grails.project.test.class.dir = "target/test-classes"
grails.project.test.reports.dir = "target/test-reports" 

并将它们替换为

grails.project.work.dir = 'target'

所以一切都在target文件夹下。当事情变得奇怪时,运行rm -rf target以强制完全重新解决和重建。

然后,不要使用内联插件(这对于传递 deps 来说不是很好,因为我们现在从 POM 文件中读取该信息,除非您正确打包插件,否则这些信息不可用)或 zip,而是使用发布插件的maven-install脚本。

将此添加到该plugins部分(删除您可能拥有的任何旧版本):

build ':release:2.2.1', ':rest-client-builder:1.0.3', {
   export = false
}

运行grails compile解决后,maven-install脚本将可用。这会打包您的插件并将其复制到$HOME/.m2/repository文件夹中的正确位置。然后,如果您在应用程序的 BuildConfig.groovymavenLocal()repositories块中添加或取消注释,您可以在应用程序中为您的插件添加一个依赖项,就好像它已在主存储库中发布一样,例如

plugins {
   compile ':my-cool-security-plugin:0.1'
}

grails maven-install当您对插件进行更改时定期重新运行,并删除目标目录以强制重新安装应用程序。

于 2013-07-29T18:03:28.667 回答