5

我想同时使用Jasper Reports(香草,从来没有让Grails Jasper 插件工作 - 看到这个)和Grails Rendering 插件(一个更适合某些报告,另一个更适合其他报告)。

如果我包含 'com.lowagie:itext:2.1.5' 或 'com.lowagie:itext:4.2.1' 则在运行渲染插件的 PDF 报告时我会丢失 com.lowagie.text.pdf.BaseFont.getCharBBox。

如果我包含“com.lowagie:itext:2.0.8”,那么在运行 Jasper 的 PDF 报告时我会丢失 com.lowagie.text.pdf.PdfWriter.setRgbTransparencyBlending。

两者都因 java.lang.NoSuchMethodError-s 而失败。

我没有尝试过最新的 iText 版本,但它们有不同的包名称和更严格的许可,所以我认为它们不太适合。

我的 BuildConfig.groovy 看起来像这样(前 3 个依赖项之一未注释):

dependencies {
  // runtime 'com.lowagie:itext:4.2.1' // missing.BaseFont.getCharBBox
  // runtime 'com.lowagie:itext:2.0.8' // missing PdfWriter.setRgbTransparencyBlending
  // runtime 'com.lowagie:itext:2.1.5' // missing.BaseFont.getCharBBox  
     compile 'net.sf.jasperreports:jasperreports:5.2.0' // needed by jasper
     runtime 'org.springframework:spring-test:3.2.4.RELEASE' // needed by rendering plugin
     runtime 'commons-collections:commons-collections:3.2.1' // needed for jasper            
}

plugins {
    // ...
       compile ":rendering:0.4.4"
    // compile ":jasper:1.6.1" // couldn't get this to generate anything, but not sure it would help any
    // ...
}

是否有任何我可以尝试的“旧”版本的 iText(MPL 许可)可能有效?

有什么方法可以让 Maven/Gradle 制作它,以便我可以让其中一个库/插件使用一个版本的 iText,而另一个?

4

1 回答 1

0

解决方案是在包含渲染插件时使用“excludes”子句:

compile(":rendering:0.4.4") {
        excludes(
            [group:'org.xhtmlrenderer'],
            [group:'com.lowagie']
        )
    }

这并不能真正解决所有问题,因为 Grails 本身包含旧版本的 org.xhtmlrenderer Flying Saucer core-renderer-R8.jar(取决于 grails-docs),但它确实回答了这个关于如何让 iText 依赖项工作(连同排除项,我只包含了 'com.lowagie:itext:2.1.7' 并且它适用于 Jasper 和渲染插件。

于 2013-09-07T10:04:42.673 回答