【问题标题】:install spring-security-core plugin into plugin, which then is installed in application将 spring-security-core 插件安装到插件中,然后将其安装在应用程序中
【发布时间】:2013-01-13 04:59:11
【问题描述】:

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

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

在我看来,好像只有 my-plugin 可以看到 spring security 插件依赖项,而 my-app 不能,所以他们甚至没有按照手册认为应该有的级联。

我还尝试通过在 BuildConfig.conf 中添加以下内容来安装 spring-security-core 插件: 编译“:spring-security-core:1.2.7.3” 但它也没有工作。

有什么想法吗?

【问题讨论】:

    标签: grails spring-security


    【解决方案1】:

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

    在旧版本的 Grails 中,插件描述符中的 dependsOn 映射用于表达插件依赖关系。现在不推荐使用此方法,而支持在 BuildConfig.groovyplugins 部分中注册的依赖项。这既是为了保持一致性,也是为了利用依赖 DSL 支持的更细粒度的特性,包括指定范围和排除项。对于应用程序也是如此 - 不要将 install-plugin 用于应用程序或插件,始终使用 BuildConfig.groovy

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

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

    【讨论】:

    • 我创建了一个新应用程序和一个插件-sstest。在插件中,我在插件部分添加了“compile ':spring-security-core:1.2.7.3'”。没有触及依赖部分,因为我真的不明白那里发生了什么。在主应用程序中,我导入了我的插件,将其添加到 BuildConfig.conf:“grails.plugin.location.'plugin-sstest' = “../plugin-sstest”。我可以编译它,一切正常,直到我使用 s2-我的插件-sstest 的快速启动。然后它停止编译并开始抛出错误,它无法从 spring 安全插件中找到依赖项。所以插件仍然没有被拉入主应用程序
    【解决方案2】:

    感谢伯特的建议。我已经使用了它,这就是我的想法:

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

    【讨论】:

    • 这不应该是一个答案 - 它应该是对您的问题或答案的评论。
    • 谢谢你的建议 - 下次我会按照你的方式做。无论如何,我找到了解决此问题的方法。我没有依赖 grails 来拉取 nesesery 依赖项,而是自己拉取它们。例如,如果我在我的插件应用程序中安装 spring-security-core,并将插件应用程序安装到主应用程序中,我也会在主应用程序中安装 spring-security-core。这很烦人,但它确实有效。
    猜你喜欢
    • 2012-10-17
    • 2013-11-17
    • 2012-05-07
    • 1970-01-01
    • 2014-01-08
    • 2011-07-07
    • 2015-02-05
    • 2013-05-11
    • 2015-09-18
    相关资源
    最近更新 更多