Grails依赖项解析

Grails依赖项解析,grails,dependency-management,Grails,Dependency Management,我有点像Grails的新手。我有一个在Eclipse中运行良好的应用程序,但当我在生产环境中部署时,由于缺少依赖项而失败 当我运行dependency report时,它会显示所有依赖项都自动存在于“build”中,但不存在于“runtime”中 将依赖项从迁移到运行时以便(我希望)将它们复制到我的war文件中的最整洁的方法是什么 另外,我正在使用消毒剂插件。这在开发中运行得很好,但是“运行时”中缺少依赖项,因此就失效了。例如,如果我手动将其中一个依赖项添加到BuildConfig.groovy

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

当我运行dependency report时,它会显示所有依赖项都自动存在于“build”中,但不存在于“runtime”中

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

另外,我正在使用消毒剂插件。这在开发中运行得很好,但是“运行时”中缺少依赖项,因此就失效了。例如,如果我手动将其中一个依赖项添加到BuildConfig.groovy(“org.owasp.antisamy:antisamy:1.4.3”)中,grails就会出现以下错误:

加载器约束冲突:加载器(的实例)以前为名为“org/xml/sax/SAXParseException”的其他类型启动加载


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

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

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

runtime('org.owasp.antisamy:antisamy:1.4.3') {
   transitive = false
}
除了“transitive=false”,您还可以尝试使用例如

excludes "xml-apis", "xerces"

在“运行时”闭包内。

非常好-谢谢。遗憾的是,没有办法自动将依赖项放到运行时语句中,而不是像福尔摩斯那样寻找它们。排除语句解决了我的第二个问题。我只需要记住手动添加它们。