使用哪个版本的iText以便JasperReports和Grails Rendering插件都能正常工作

时间:2013-09-02 19:05:38

标签: maven jasper-reports gradle itext

我想同时使用Jasper Reports(vanilla,永远不会让Grails Jasper plugin工作 - 请参阅this)和Grails Rendering plugin(一个更适合某些报告,另一个报告,另一个对于其他人)。

如果我包含'com.lowagie:itext:2.1.5'或'com.lowagie:itext:4.2.1'那么我在运行Rendering插件的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,另一个版本使用另一个版本?

1 个答案:

答案 0 :(得分:0)

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

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

这并没有真正解决所有问题,因为有一个旧版本的org.xhtmlrenderer Flying Saucer core-renderer-R8.jar包含在Grails本身(依赖于grails-docs),但它确实回答了这个特定的问题关于如何使iText依赖工作(除了我简单包括'com.lowagie:itext:2.1.7',它适用于Jasper和渲染插件。