web-dev-qa-db-fra.com

Erreur de dépendance dans jasper-reports from itext

Depuis hier, j’ai des problèmes pour compiler avec maven à cause de iText jar . Mon projet a une dépendance de jasperreports-2.0.1 qui dépend de itext-1.02b ou plus.

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

C'est l'erreur de journal dans 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] 

Je vois ici un commentaire d’Amedee Van Gasse qui dit quelque chose à propos d’une version 4.2.2 sans bocal.

Pourquoi la version 1.02b est-elle attachée à 4.2.2?

Edit: Jasper-reports utilise une plage de versions ouverte:

[1.02b,)

Cette gamme dit à maven de prendre la dernière version de la bibliothèque.

Avec le update de iText, ajouter la nouvelle version Pom sans jar et éditer les méta-données maven de maven-central vers cette version sans jar bloque la compilation dans tous les jar selon la dernière bibliothèque com.lowagie.

Mettre à jour localement votre fichier maven-metadata-central.xml (et d'autres métadonnées si votre société possède son propre nexus.public) à partir de ... m2\repository\com\lowagie\itext Jusqu'à ce qui fonctionne. Solution temporaire jusqu'à ce que iText mette à jour les métadonnées ou TOUTES les sociétés dépendantes de sa dernière version mise à jour

<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
Laura Abad Avilés

Une solution beaucoup plus simple peut être de passer à une version plus récente de jasperreports. La version 6.1.0 a cette dépendance sur iText:

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

Plus de dépendance "flottante" sur iText, et c'est une version faite sur mesure pour les jasperreports!

Voir http://mvnrepository.com/artifact/net.sf.jasperreports/jasperreports/6.1.0 pour connaître le pom.xml complet.

14
Amedee Van Gasse

Le problème est bien dans le POM de jasper-reports:

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

Jasper-reports distribue une version (modifiée) de iText 2.1.7 depuis au moins novembre 2012 (si ma mémoire est bonne), donc si votre version de jasper-reports a toujours une dépendance sur 1.02b et plus, il doit s'agir d'une version très ancienne.

La dépendance de jasper-reports sur iText doit être remplacée par:

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

Ou juste:

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

Cela concerne cette question: Comment puis-je dire à Maven d'utiliser la dernière version d'une dépendance? Cette page est truffée de mises en garde sur le fait de toujours utiliser la dernière version pour vos dépendances. Cela réduit la reproductibilité de vos builds.

2.1.7 était la dernière version d'iText publiée par la société iText Group NV (ou son prédécesseur légal), avec le com.lowagie groupId. La prochaine version de iText, publiée par la société iText Group NV, était la version 5.0.0, avec le com.itextpdf groupId, ce qui signifie qu’elle est binaire incompatible avec votre code actuel. Il y a aussi la question d'un changement de licence en AGPL, mais cela n'entre pas dans le cadre de StackOverflow, je veux limiter ma réponse aux questions techniques.

Toutes les autres versions de iText entre 2.1.7 et 5.0.0, telles que 4.2.0 et 4.2.1, sont des versions des autres sociétés. Selon le Guide de téléchargement des artefacts dans le référentiel central ( https://maven.Apache.org/guides/mini/guide-central-repository-upload.html ) d'Apache, ces sociétés auraient dû utiliser un ID de groupe différent, comme le dit clairement la page dans leur FAQ:

J'ai une version patchée du projet foo développé sur foo.com, quoi groupId devrais-je utiliser? Lorsque vous corrigez/modifiez un projet tiers, cette version corrigée devient votre projet et doit donc être distribué sous un groupId vous contrôlez comme n'importe quel projet que vous auriez développé, jamais sous com.foo. Voir ci-dessus les considérations sur groupId.

TL; DR Si vous ne souhaitez pas modifier votre code, demandez à votre Maven de n'utiliser que iText 2.1.7.

12
Amedee Van Gasse

Nous décidons de maintenir la même version de jasperreport et d’apporter cette modification aux conflits de pom:

<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>

Edit: Changez la dépendance en 2.1.7 pour être sûr qu'elle sera compilée à l'avenir

5
Laura Abad Avilés

JasperReports a corrigé l'iText avec quelques corrections de bugs. Vous devez donc ajouter le repo iText corrigé [1] dans votre fichier pom/gradle.

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

Ci-dessous l'extrait de code pour votre référence lorsque vous utilisez 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

Nous avons le meme probleme. Pour le résoudre, nous avons supprimé les paramètres proxy de la configuration Maven et modifié la dernière version de maven-metadata-central (dans le dossier com\lowagie\itext de votre référentiel).

Une mauvaise solution, mais qui fonctionne temporairement: /

1
Usul Yo

J'ai le même problème avec Maven 2.2.1, j'ai reconstruit mon projet en utilisant Maven 3.2.3 et ses travaux!

Vous devez utiliser Maven 3 pour résoudre votre problème, le bogue semble être résolu dans cette version. 

0
Meher