第三方库在我的Grails 2.5.5应用程序中发生冲突

时间:2017-10-15 21:49:40

标签: grails flying-saucer

我有一个问题,我的想法如何解决它刚刚完成。也许你可以帮助我。 在我的项目中,我正在使用'org.xhtmlrenderer:flying-saucer-pdf:9.1.7'此库使用取决于com.lowagie:itext:2.1.7。不幸的是我也应该导入com.lowagie:itext:2.1.7。所以我有这样的事情:

grails.project.dependency.resolution = {
    dependencies {
        build ('com.lowagie:itext:2.1.7') {
            excludes 'bctsp-jdk14'
            excludes 'bcmail-jdk14'
            excludes 'bcprov-jdk14'
        }
        compile 'org.xhtmlrenderer:flying-saucer-pdf:9.1.6'
     }
}

当我尝试使用飞碟库时会出现问题。我有一个例外:com.lowagie.text.pdf.BaseFont.getCharBBox(C)[Ijava.lang.NoSuchMethodError: com.lowagie.text.pdf.BaseFont.getCharBBox(C)

问题是如何修复类似的东西,因为我和库只使用com.lowagie:itext:2.1.7

感谢。

1 个答案:

答案 0 :(得分:1)

你们的Grails项目正在所谓的JAR Hell中受苦。您的Grails应用程序依赖项和传递依赖项(您的依赖项和Grails插件使用的依赖项)正在产生冲突。在您的情况下,类路径上的类的多个版本。

您所能做的就是分析您的WAR类路径并尝试识别冲突的类及其JAR。

之后尝试以下解决方案之一:

  • 找到适用于Grails应用及其插件的通用版iText
  • 分叉冲突的Grails插件并尝试清理该插件的依赖项。然后使用fork。

在寻找其他解决方案时,我找到了一个名为jHades的有前途的软件项目。也许你可能也想看看这个。

jHades允许您通过执行以下命令来分析您的WAR文件

java -jar jhades-standalone-report.jar path/to/war/webapp.war

此外,您可以通过将jHades添加到类路径(作为依赖项)并向您的web.xml添加jHades servlet listener来解决Web应用程序问题。

<listener>
        <listener-class> org.jhades.JHadesServletListener</listener-class>
</listener>