我在两个不同的Grails插件(Drools 0.3和WebTest)之间遇到了一个问题,它们似乎都包含某些版本的xml-api- *,这些似乎无法共存。
解决这类问题的最佳方法是什么?
答案 0 :(得分:2)
删除其中一个有问题的库是一种方法,但每次检查源代码时都会很痛苦。不幸的是,我想不出另一种方式,因为xml-apis不在WebTest的插件lib目录中,而是作为下载的WebTest安装的一部分。
通常情况下,如果应用程序lib目录中已存在插件lib jar,则它不会添加到类路径中,因此您可以创建一个具有相同名称的虚拟jar来阻止其中一个库被添加。
通过查看WebTest插件源,它应该从类路径中排除xml-apis(_Events.groovy第100行) - 您使用的是最新版本吗?你确定不是Drools插件与Grails的xml-apis冲突吗?
1.2中有更好的依赖性解决方案,以后哪些插件可以用来避免这种问题。
答案 1 :(得分:2)
最好的方法是使用Grails dependency resolution DSL.。您可以排除这样的违规依赖:
plugin("hibernate") {
compile( 'org.hibernate:hibernate-core:3.3.1.GA') {
excludes 'ehcache', 'xml-apis', 'commons-logging'
}
compile 'org.hibernate:hibernate-annotations:3.4.0.GA',
'org.hibernate:hibernate-commons-annotations:3.3.0.ga'
runtime 'javassist:javassist:3.4.GA'
}
这是自Grails 1.2以来的工作。您的插件很可能是Grails-1.2之前的版本,否则基于Ivy的内部依赖解析机制应该为您解决冲突。依赖解析DSL只不过是编写常春藤xml的常规方式。
答案 2 :(得分:1)
我不确定,但要尝试的是进入每个插件的目录:
〜/ .grails / $ {GRAILS_VERSION} /插件/ $ {THE_PLUGIN} / lib中
并删除最低版本的xml-api - *。
如果幸运的话,新版本的库中没有重大变化。
整个grails应用程序似乎可以访问插件的库(否则你不会受到冲突)。
我做了类似的事情,在jasper插件中升级到更新版本的jasper报告库,它对我有用。你的情况可能会有点复杂。