2013-09-02 8 views
5

chcę użyć zarówno Jasper Reports (wanilia, nigdy nie dostał Grails Jasper plugin pracować - patrz this) i Grails Rendering plugin (jeden jest bardziej odpowiedni dla niektórych raportów, inny dla inne).Która wersja iText używać tak, że obie wtyczki Rendering JasperReports i Grails działa

Jeśli dodaję "com.lowagie: itext: 2.1.5" lub "com.lowagie: itext: 4.2.1", to brakuje mi com.lowagie.text.pdf.BaseFont.getCharBBox po uruchomieniu wtyczki Rendering Raport w formacie PDF.

Jeśli dodaję "com.lowagie: itext: 2.0.8", to brakuje mi com.lowagie.text.pdf.PdfWriter.setRgbTransparencyBlending po uruchomieniu raportu PDF Jaspera.

Oba błędy kończą się na java.lang.NoSuchMethodError-s.

Nie próbowałem z najnowszymi wersjami iText, ale mają one różne nazwy pakietów i bardziej restrykcyjne licencje, więc nie sądzę, by były dobrze dopasowane.

My BuildConfig.groovy wygląda następująco (jeden z pierwszych 3 zależnościami dostaje Odkomentowano):

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

Czy istnieje „stara” wersja iText (MPL-licencjonowany), że mogę spróbować, które mogą pracować ?

Czy jest jakiś sposób, aby zapytać Mavena/Gradle'a, czy mogę poprosić jedną z bibliotek/wtyczek o użycie jednej wersji iText, a innej drugiej?

+1

Każda wersja * biblioteki JasperReports * zależy od konkretnych wersji bibliotek zewnętrznych i * iText * nie jest wyjątkiem od tej reguły. Możesz spróbować na własne ryzyko eksperymentować z zależnością * iText *. Możesz znaleźć wersję * iText * w * pom.xml * (zobacz artefakt * com.lowagie.itxt *) biblioteki * JR *. Na przykład * JR 5.2.0 * używa artefaktu *** com.lowagie.itext-2.1.7.js2 *** –

+0

Dzięki, to jest pomocne. Sprawdziłem https://github.com/flyingsaucerproject/flyingsaucer/blob/master/flying-saucer-pdf/pom.xml i wydaje się, że używa on 2.1.7 itext, ale i tak zawodzi. Myślę, że otworzę defekt dla Latającego Spodka. –

+0

Biorąc to pod uwagę, zakładając, że Jasper i Flying Saucer działają tylko z inną wersją biblioteki iText, co można zrobić, aby to rozwiązać? –

Odpowiedz

0

Rozwiązaniem jest użycie „wyklucza” klauzuli, gdy w tym wtyczki renderowania:

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

To naprawdę nie rozwiązuje wszystkich problemów, ponieważ nie jest stara wersja org.xhtmlrenderer latający spodek rdzeń renderujący -R8.jar dołączony do samego Grails (zależny od grails-docs), ale odpowiada na to konkretne pytanie o to, jak uruchomić zależność iText (wraz z wykluczeniami po prostu zawarłem "com.lowagie: itext: 2.1. 7 'i działało zarówno dla Jaspera, jak i dla renderingu.

Powiązane problemy