我刚刚切换到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” 但它也没有用。
有什么想法吗?
答案 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版本中的某种错误。