我想同时使用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,另一个版本使用另一个版本?
答案 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和渲染插件。