2011-03-02 68 views
3

我是一个Grails新手。我有一个在Eclipse中可以正常工作的应用程序,但是当我在生产环境中进行部署时,由于缺少依赖关系,此应用程序已经崩溃。Grails依赖分辨率

当我运行依赖关系报告时,它显示所有依赖关系自动显示为“构建”,但缺少“运行时”。

什么是将依赖关系迁移到运行时的最新方式,所以(我希望)他们会被复制到我的战争文件中?

此外,我正在使用卫生消毒插件。这在开发过程中运行良好,但“运行时”中缺少依赖关系,因此无法完成。例如,如果我手动将其中一个依赖关系添加到BuildConfig.groovy(“org.owasp.antisamy:antisamy:1.4.3”),那么Grails会因此错误而崩溃:

加载器约束违例:loader(instance )以前启动加载一个不同类型的名称为“org/xml/sax/SAXParseException”

我假设这是一个类路径问题,但我不知道为什么只有当我手动添加依赖 - 当然是一直存在的?

回答

2

你是对的,你必须添加缺少的运行时依赖到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" 

'runtime'closure内部。

+0

非常好 - 谢谢。遗憾的是,没有办法自动将运行时声明的依赖关系放入运行时声明中,而不是让福尔摩斯去找到它们。 excludes声明排除了我的第二个问题。我只需要记住手动添加它们。 – JohnnyD 2011-03-02 17:18:30