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

Third party libraries conflict in my Grails 2.5.5 application

我有一个问题,我的解决方法刚刚完成。也许你可以帮助我。 在我的项目中,我使用 '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

谢谢。

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

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

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

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

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

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

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

此外,您可以通过将 jHades 添加到您的 class 路径(作为依赖项)并向您的 web.xml.

添加一个 jHades servlet listener 来解决您的 Web 应用程序问题
<listener>
        <listener-class> org.jhades.JHadesServletListener</listener-class>
</listener>