it-swarm.com.de

Abhängigkeitsfehler in Jasper-Berichten von itext

Seit gestern habe ich Probleme mit maven zu kompilieren, weil iText jar. Mein Projekt hat eine Abhängigkeit von jasperreports-2.0.1, die von itext-1.02b oder höher abhängt.

<dependency>
    <groupId>com.lowagie</groupId>
    <artifactId>itext</artifactId>
    <version>[1.02b,)</version>
    <scope>compile</scope>
</dependency>

Das ist der Log-Fehler in Maven:

Failed to collect dependencies for [jasperreports:jasperreports:jar:2.0.1 (compile)]: Failed to read artifact descriptor for com.lowagie:itext:jar:4.2.2: Could not transfer artifact com.itextpdf:itextpdf:pom:4.2.2 from/to jaspersoft (http://www.jasperforge.org/maven2): Access denied to http://www.jasperforge.org/maven2/com/itextpdf/itextpdf/4.2.2/itextpdf-4.2.2.pom. Error code 403, Forbidden -> [Help 1] 

Ich sehe hier einen Kommentar von Amedee Van Gasse, der etwas über eine 4.2.2-Version ohne Glas sagt.

Warum hängt die 1.02b-Version an 4.2.2 an?

Bearbeiten: Jasper-Reports verwendet einen offenen Versionsbereich:

[1.02b]

Dieser Bereich besagt, dass Sie die neueste Version der Bibliothek verwenden möchten.

Mit dem update from iText fügen Sie eine neue Version von Pom ohne jar hinzu und bearbeiten die Maven-Metadaten von maven-central, um die no-jar-Version zu kompilieren.

Aktualisieren Sie lokal Ihre maven-metadata-central.xml (und andere Metadaten, wenn Ihr Unternehmen über nexus.public verfügt) von ... m2\repository\com\lowagie\itext Zeitliche Aufklärung, bis iText die Metadaten oder ALLE Unternehmen mit Abhängigkeiten für die neuesten Versionsaktualisierungen aktualisiert

<metadata modelVersion="1.1.0">
  <groupId>com.lowagie</groupId>
  <artifactId>itext</artifactId>
  <versioning>
    <latest>4.2.1</latest>
    <release>4.2.1</release>
    <versions>
      <version>0.99</version>
      <version>1.1.4</version>
      <version>1.02b</version>
      <version>1.2.3</version>
      <version>1.3</version>
      <version>1.3.1</version>
      <version>1.4</version>
      <version>1.4.8</version>
      <version>2.0.1</version>
      <version>2.0.6</version>
      <version>2.0.7</version>
      <version>2.0.8</version>
      <version>2.1.0</version>
      <version>2.1.2</version>
      <version>2.1.3</version>
      <version>2.1.4</version>
      <version>2.1.5</version>
      <version>2.1.7</version>
      <version>4.2.0</version>
      <version>4.2.1</version>
    </versions>
    <lastUpdated>20150709153501</lastUpdated>
  </versioning>
</metadata>
14

Eine viel einfachere Lösung kann ein Upgrade auf eine neuere Version von jasperreports sein. Version 6.1.0 hat diese Abhängigkeit von iText:

<dependency>
    <groupId>com.lowagie</groupId>
    <artifactId>itext</artifactId>
    <version>2.1.7.js2</version>
    <scope>compile</scope>
</dependency>

Keine "schwebende" Abhängigkeit von iText mehr, und diese Version wurde speziell für Jasperreports entwickelt.

Siehe http://mvnrepository.com/artifact/net.sf.jasperreports/jasperreports/6.1.0 für den vollständigen pom.xml.

14

Das Problem liegt in der Tat im POM von Jasper-Berichten:

<dependency>
  <groupId>com.lowagie</groupId>
  <artifactId>itext</artifactId>
  <version>[1.02b,)</version>
  <scope>compile</scope>
</dependency>

Jasper-reports verteilt einen (modifizierten) Build von iText 2.1.7 seit mindestens November 2012 (wenn mir der Speicher gut tut). Wenn Ihre Version von Jasper-Reports noch eine Abhängigkeit von 1.02b und höher hat, muss es eine sehr alte Version sein.

Die Jasper-Reports-Abhängigkeit von iText sollte geändert werden in:

<dependency>
  <groupId>com.lowagie</groupId>
  <artifactId>itext</artifactId>
  <version>[1.02b,2.1.7]</version>
  <scope>compile</scope>
</dependency>

Oder nur:

<dependency>
  <groupId>com.lowagie</groupId>
  <artifactId>itext</artifactId>
  <version>2.1.7</version>
  <scope>compile</scope>
</dependency>

Dies bezieht sich auf diese Frage: Wie kann ich Maven sagen, dass er die neueste Version einer Abhängigkeit verwenden soll? Diese Seite enthält viele Hinweise darauf, dass immer die neueste Version für Ihre Abhängigkeiten verwendet wird. Es reduziert die Reproduzierbarkeit Ihrer Builds.

2.1.7 war die letzte Version von iText, die von der Firma iText Group NV (oder deren Rechtsvorgänger) mit der com.lowagie-Gruppen-ID veröffentlicht wurde. Die nächste Version von iText, veröffentlicht von der Firma iText Group NV, war Version 5.0.0 mit der com.itextpdf groupId, was bedeutet, dass sie binär mit Ihrem aktuellen Code nicht kompatibel ist. Es gibt auch die Frage einer Lizenzänderung in AGPL, aber das liegt außerhalb des Geltungsbereichs von StackOverflow. Ich möchte meine Antwort auf technische Fragen beschränken.

Alle anderen Versionen von iText zwischen 2.1.7 und 5.0.0, wie 4.2.0 und 4.2.1, sind Gabeln von anderen Unternehmen. Laut dem Apache-Handbuch zum Hochladen von Artefakten in das zentrale Repository ( https://maven.Apache.org/guides/mini/guide-central-repository-upload.html ) sollten diese Unternehmen eine andere groupId verwenden wie die Seite in ihren FAQs eindeutig feststellt:

Ich habe eine gepatchte Version des foo-Projekts, das auf foo.com entwickelt wurde. groupId sollte ich verwenden? Wenn Sie ein Drittanbieterprojekt patchen/ändern, Diese gepatchte Version wird zu Ihrem Projekt und sollte daher .__ sein. Sie werden unter einer groupId verteilt, die Sie wie jedes andere Projekt kontrollieren können entwickelt, niemals unter com.foo. Siehe die obigen Überlegungen zu Gruppen-ID.

TL; DR Wenn Sie Ihren Code nicht ändern möchten, fordern Sie Ihren Maven auf, nur iText 2.1.7 zu erhalten.

12

Wir beschließen, die jasperreport-Version beizubehalten, und haben diese Änderungen in Konfliktsituationen vorgenommen:

<dependencies>
    <dependency>
            <groupId>jasperreports</groupId>
            <artifactId>jasperreports</artifactId>
            <version>2.0.1</version>
            <exclusions>
                <exclusion>
                    <groupId>com.lowagie</groupId>
                    <artifactId>itext</artifactId>
                </exclusion>
            </exclusions>           
    </dependency>
    <dependency>
        <groupId>com.lowagie</groupId>
        <artifactId>itext</artifactId>
        <version>2.1.7</version>
    </dependency>
...
</dependencies>

Bearbeiten: Ändern Sie die Abhängigkeit zu 2.1.7, um sicherzustellen, dass sie in Zukunft kompiliert wird

5

JasperReports reparierte den iText mit einigen Fehlerbehebungen. Sie müssen also das gepatchte iText-Repo [1] in Ihre Pom/Gradle-Datei einfügen.

[1] http://jasperreports.sourceforge.net/maven2/

Nachfolgend finden Sie das Gradle-Snippet als Referenz für die Verwendung von Jasper Report 6.1.1 . repositories { mavenLocal() mavenCentral() maven { url "http://repo.spring.io/release" } maven { url "http://jaspersoft.artifactoryonline.com/jaspersoft/third-party-ce-artifacts/" } maven { url "http://jasperreports.sourceforge.net/maven2/" } } .

3
Kane

Ich benutze gradle und für die aktuelle Version 6.8.2 Ich habe den folgenden Build-Fehler erhalten:
> Could not find com.lowagie:itext:2.1.7.js6

Also habe ich http://jaspersoft.jfrog.io/jaspersoft/third-party-ce-artifacts/ als Repository und jetzt funktioniert es.

repositories {
    mavenCentral()
    maven { url "http://jaspersoft.jfrog.io/jaspersoft/third-party-ce-artifacts/" }
}

dependencies {
    compile 'net.sf.jasperreports:jasperreports:6.8.0'
}
1
das Keks

Wir haben das gleiche Problem. Um dies zu beheben, haben wir die Proxy-Parameter der Maven-Konfiguration gelöscht und die letzte Version von Maven-Metadata-Central (im Ordner com\lowagie\itext Ihres Repositorys) geändert.

Eine schlechte Lösung, aber vorübergehend funktioniert: /

1
Usul Yo

Ich habe das gleiche Problem, wenn ich Maven 2.2.1 verwende. Ich habe mein Projekt mit Maven 3.2.3 und seinen Werken neu erstellt!

Sie müssen Maven 3 verwenden, um Ihr Problem zu lösen. Der Fehler scheint in dieser Version behoben zu sein. 

0
Meher