【问题标题】:Grails Dependency ResolutionGrails 依赖解析
【发布时间】:2011-07-07 07:10:15
【问题描述】:

我是一个 Grails 新手。我有一个在 Eclipse 中运行良好的应用程序,但是当我在生产环境中部署时由于缺少依赖项而崩溃。

当我运行依赖项报告时,它显示所有依赖项都自动出现在“构建”中,但在“运行时”中不存在。

将依赖项从迁移到运行时的最简洁方法是什么,以便(我希望)它们被复制到我的 war 文件中?

另外,我正在使用 sanitizer 插件。这在开发中运行良好,但在“运行时”中缺少依赖项,因此失败了。例如,如果我手动将其中一个依赖项添加到 BuildConfig.groovy ("org.owasp.antisamy:antisamy:1.4.3") 中,则 grails 会出现此错误:

加载程序约束违规:加载程序(的实例)先前为名为“org/xml/sax/SAXParseException”的不同类型启动加载

我假设这是一个类路径问题,但我不确定为什么只有在我手动添加依赖项时才会发生这种情况——它肯定一直存在吗?

【问题讨论】:

    标签: grails dependency-management


    【解决方案1】:

    你是对的,你必须将缺少的运行时依赖项添加到 BuildConfig.groovy。最简单的方法是将它们从插件的 BuildConfig.groovy 复制到您的应用程序中。您还应该为相应的 grails 插件提出 JIRA 以在上游修复此问题。

    Maven 存储库中的许多 jar 的依赖项未在其 pom 文件中正确定义。 在 BuildConfig.groovy 中有一种方法可以通过关闭传递性来解决这个问题:

    runtime('org.owasp.antisamy:antisamy:1.4.3') {
       transitive = false
    }
    

    您也可以尝试仅排除特定依赖项,而不是使用“传递=假”,例如

    excludes "xml-apis", "xerces"
    

    在“运行时”闭包内。

    【讨论】:

    • 非常好 - 谢谢。遗憾的是,没有办法自动将依赖项放入运行时语句中,而不是让 Sherlock Holmes 找到它们。 excludes 语句解决了我的第二个问题。我只需要记住手动添加它们。
    猜你喜欢
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    相关资源
    最近更新 更多