将spring-security-core插件安装到插件中,然后将其安装在应用程序中

时间:2013-01-29 15:09:51

标签: grails spring-security

我刚刚切换到grails 2.2并且遇到了一个主要的插件问题。我有一个应用程序 - 我的应用程序和插件 - 我的插件。我想在我的插件中安装spring-security-core插件,然后将my-plugin安装到my-app中。当我完成这个并做了s2-quickstart时,就创建了LoginController。我现在可以毫无问题地启动my-plugin,但是当我尝试启动my-app时,它会抱怨它无法找到任何springsecurity类。错误看起来像这样:

12:无法解析类org.springframework.security.web.WebAttributes @第12行第1列。 7:无法解析类org.springframework.security.authentication.AccountExpiredException @第7行,第1列。 11:无法解析类org.springframework.security.core.context.SecurityContextHolder @第11行,第1列。

在我看来,就像只有my-plugin可以看到spring安全插件依赖项,而my-app不能,所以他们没有按照他们应该拥有的手册进行级联。

我还尝试通过添加BuildConfig.conf来安装spring-security-core插件: 编译“:spring-security-core:1.2.7.3” 但它也没有用。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

如果您在插件中使用install-plugin,则只能通过在application.properties中添加一行来在本地安装。它不会作为插件的依赖项导出。这可以用于code-coverage之类的插件,您希望在开发和测试期间使用它,但不要强迫用户同时安装它。

在旧版本的Grails中,插件描述符中的dependsOn映射用于表示插件依赖性。现在不推荐使用此选项,以支持在plugins BuildConfig.groovy部分中注册的依赖项。这既是为了一致性,又是为了利用依赖DSL支持的更细粒度的功能,包括指定范围和排除。对于应用程序也是如此 - 请勿对应用程序或插件使用install-plugin,请始终使用BuildConfig.groovy

看看spring-security-ldap plugin's BuildConfig.groovy。它对核心插件有一个编译范围依赖,加上一个未导出的hibernate插件(因为它仅用于测试)和一个对发布插件的构建范围依赖(因为刚刚使用它也没有导出)发布插件)。

您应该对BuildConfig.groovy中的核心插件使用类似的依赖关系。删除application.properties中的所有插件引用并转换为BuildConfig.groovy语法并运行grails clean,然后运行grails compile

答案 1 :(得分:0)

谢谢伯特的建议。我用过它,这就是我的意思:

我创建了一个插件应用并在其中安装了spring-security-core插件(使用DataSource.groovy,而不是安装插件)。然后我创建了一个主应用程序并安装了我的插件应用程序(再次使用DataSource.groovy)。当我在grails中做到这一点2.1.1一切正常 - 我可以在我的主应用程序中使用spring-security,因此依赖性被拉得恰到好处。当我做了所有相同的事情,但在grails 2.2中我无法在我的主应用程序中使用spring-security,因此依赖关系没有被拉动。这就是为什么我认为这可能是新grails版本中的某种错误。