2013-09-02 12 views
5

voglio usare sia Jasper Reports (vaniglia, mai avuto il Grails Jasper plugin al lavoro - vedi this) e Grails Rendering plugin (uno è più adatto per alcuni rapporti, un altro per altri).Quale versione di iText da utilizzare in modo che sia JasperReports e Grails rendering plugin funziona

Se includo "com.lowagie: itext: 2.1.5" o "com.lowagie: itext: 4.2.1", allora mi manca com.lowagie.text.pdf.BaseFont.getCharBBox quando si esegue il plug-in di Rendering Rapporto PDF.

Se includo "com.lowagie: itext: 2.0.8", allora mi manca com.lowagie.text.pdf.PdfWriter.setRgbTransparencyBlending sull'esecuzione del report PDF di Jasper.

Entrambi non riescono con java.lang.NoSuchMethodError-s.

Non ho provato con le ultime versioni di iText, ma hanno nomi di pacchetti diversi e licenze più restrittive, quindi non credo che sarebbero una buona misura.

mio BuildConfig.groovy si presenta così (una delle prime 3 dipendenze ottiene commentata):

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 
    // ... 
} 

C'è qualche "vecchia" versione di iText (MPL-licenza) che ho potuto provare che può funzionare ?

C'è un modo per chiedere a Maven/Gradle di farlo in modo che possa chiedere a una delle librerie/plug-in di utilizzare una versione di iText e un'altra l'altra?

+1

Ogni versione della libreria * JasperReports * dipende da versioni specifiche delle librerie di terze parti e * iText * non fa eccezione a questa regola. Puoi provare a tuo rischio e pericolo di sperimentare con la dipendenza * iText *. Puoi trovare la versione di * iText * nel * pom.xml * (vedi la * com.lowagie.itext * artefatto) della libreria * JR *. Ad esempio, * JR 5.2.0 * utilizza *** com.lowagie.itext-2.1.7.js2 *** artefatto –

+0

Grazie, questo è utile. Ho cercato https://github.com/flyingsaucerproject/flyingsaucer/blob/master/flying-saucer-pdf/pom.xml e sembra che utilizzi itext 2.1.7, ma comunque non ci riesce. Penso che aprirò un difetto per Flying Saucer. –

+0

Detto questo, supponendo che Jasper e Flying Saucer funzionino solo con una versione diversa della libreria iText, cosa si può fare per risolverlo? –

risposta

0

La soluzione è quella di utilizzare la clausola "esclude" quando incluso il plug-in di rendering:

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

Questo in realtà non risolve tutti i problemi in quanto v'è una vecchia versione di org.xhtmlrenderer Flying Saucer core-renderer -R8.jar incluso con Grails stesso (dipende da Grails-docs), ma risponde a questa domanda specifica su come far funzionare la dipendenza di iText (insieme agli esclusi ho semplicemente incluso 'com.lowagie: itext: 2.1. 7 'e ha funzionato sia per Jasper che per il plugin di rendering.

Problemi correlati