两个Grails插件之间的冲突

两个Grails插件之间的冲突,grails,Grails,我在两个不同的Grails插件(Drools 0.3和WebTest)之间遇到了一个问题,它们似乎都包含了xml api-*的某个版本,而这些插件似乎无法共存 解决这类问题的最佳方法是什么 我不确定,但可以尝试进入每个插件的目录: ~/.grails/${grails\u VERSION}/plugins/${THE\u PLUGIN}/lib 并删除xml api的最低版本-* 如果幸运的话,新版本的库中没有破坏性的更改 似乎整个grails应用程序都可以访问插件的libs(否则就不会发生冲突

我在两个不同的Grails插件(Drools 0.3和WebTest)之间遇到了一个问题,它们似乎都包含了xml api-*的某个版本,而这些插件似乎无法共存


解决这类问题的最佳方法是什么

我不确定,但可以尝试进入每个插件的目录:

~/.grails/${grails\u VERSION}/plugins/${THE\u PLUGIN}/lib

并删除xml api的最低版本-*

如果幸运的话,新版本的库中没有破坏性的更改

似乎整个grails应用程序都可以访问插件的libs(否则就不会发生冲突)


我在jasper插件中做了类似的事情,升级到了更新版本的jasper报告库,这对我很有用。不过,您的情况可能会稍微复杂一些。

我不确定,但可以尝试进入每个插件的目录:

~/.grails/${grails\u VERSION}/plugins/${THE\u PLUGIN}/lib

并删除xml api的最低版本-*

如果幸运的话,新版本的库中没有破坏性的更改

似乎整个grails应用程序都可以访问插件的libs(否则就不会发生冲突)


我在jasper插件中做了类似的事情,升级到了更新版本的jasper报告库,这对我很有用。不过,您的情况可能会稍微复杂一些。

删除一个有问题的lib是一种方法,但每次签出源代码时都会很痛苦。不幸的是,我想不出其他方法,因为XMLAPI不在WebTest的插件库目录中,而是作为下载的WebTest安装的一部分

如果插件库jar已经存在于应用程序lib dir中,则通常不会将其添加到类路径中,因此您可以创建一个同名的虚拟jar来停止添加其中一个lib

从WebTest插件源代码来看,无论如何,它都应该从类路径中排除XMLAPI(_Events.groovy line 100)-您使用的是最新版本吗?你确定不是Drools插件与Grails的XMLAPI冲突吗


1.2版本中提供了更好的依赖解决方案,插件可以使用这些解决方案来避免将来出现此类问题。

删除一个有问题的lib是一种方法,但每次签出源代码时都会很痛苦。不幸的是,我想不出其他方法,因为XMLAPI不在WebTest的插件库目录中,而是作为下载的WebTest安装的一部分

如果插件库jar已经存在于应用程序lib dir中,则通常不会将其添加到类路径中,因此您可以创建一个同名的虚拟jar来停止添加其中一个lib

从WebTest插件源代码来看,无论如何,它都应该从类路径中排除XMLAPI(_Events.groovy line 100)-您使用的是最新版本吗?你确定不是Drools插件与Grails的XMLAPI冲突吗


1.2版本中提供了更好的依赖性解决方案,插件将来可以使用这些解决方案来避免此类问题。

最好的方法是使用Grails。您可以排除如下不符合要求的依赖项:

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'    
}

自Grails1.2以来,这种方法一直有效。很可能您的插件是Grails-1.2之前的版本,否则基于的内部依赖解析机制应该为您解决冲突。依赖解析DSL不过是编写IvyXML的groovy方式。

最好的方法是使用Grails。您可以排除如下不符合要求的依赖项:

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'    
}

自Grails1.2以来,这种方法一直有效。很可能您的插件是Grails-1.2之前的版本,否则基于的内部依赖解析机制应该为您解决冲突。依赖解析DSL不过是编写常春藤xml的groovy方式。

老实说,我不确定是否需要重新进行WebTest。我用的是1.2M3的夜间睡眠。我将从drools中挑选xml API,最坏的情况是,看看我是否可以构建一个更好的drools插件而不出问题。但我要说的是,我对grails插件arch知之甚少,老实说,我不确定是否需要重新进行WebTest。我用的是1.2M3的夜间睡眠。我将从drools中挑选xml API,最坏的情况是,看看我是否可以构建一个更好的drools插件而不出问题。但我说的是,对grails插件arch几乎一无所知:)