Подтвердить что ты не робот

Ошибка зависимости в jasper-отчетах из itext

Со вчерашнего дня у меня проблемы с компиляцией с maven из-за itext jar. Мой проект имеет зависимость от jasperreports-2.0.1, которая зависит от itext-1.02b и выше.

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

Это ошибка журнала в 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] 

Я вижу здесь комментарий от Amedee Van Gasse, который говорит что-то о версии 4.2.2 без банок.

Почему версия 1.02b прикрепляется к 4.2.2?

Изменить: Jasper-reports использует открытый диапазон версий:

[1.02b)

Этот диапазон говорит maven, чтобы взять последнюю версию библиотеки.

С обновить от iText, добавляя новую версию Pom без баночки и редактируя maven-метаданные maven-central для этого no-jar версия разбивает компиляцию на все jar в зависимости от последней библиотеки com.lowagie.

Обновляя локально ваш maven-metadata-central.xml(и другие метаданные, если ваша компания имеет собственную nexus.public) из... m2\repository\com\lowagie\itext к тому работает. Temporally solucion до тех пор, пока iText не обновит метаданные или ВСЕ компании, у которых есть зависимости для последней версии обновления. Pom

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

Ответ 1

Более простым решением может быть обновление до более новой версии jasperreports. Версия 6.1.0 имеет эту зависимость от iText:

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

Больше нет "плавающей" зависимости от iText, и это версия, выполненная для jasperreports!

См. http://mvnrepository.com/artifact/net.sf.jasperreports/jasperreports/6.1.0 для полного pom.xml.

Ответ 2

Проблема действительно в POM сообщений jasper:

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

Jasper-reports распределяет (модифицированную) сборку iText 2.1.7 с по крайней мере с ноября 2012 года (если память мне хорошо помогает), поэтому, если ваша версия jasper-отчетов по-прежнему имеет зависимость от 1.02b и выше, это должен быть очень старой версией.

Зависимость jasper-reports от itext должна быть изменена на:

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

Или просто:

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

Это относится к этому вопросу: Как сообщить Maven, чтобы использовать последнюю версию зависимости? Эта страница пронизана предостережениями о том, чтобы всегда использовать последнюю версию для ваших зависимостей. Это уменьшает воспроизводимость ваших сборников.

2.1.7 была последней версией iText, выпущенной компанией iText Group NV (или ее законным предшественником) с com.lowagie groupId. Следующая версия iText, выпущенная компанией iText Group NV, была версия 5.0.0 с com.itextpdf groupId, что означает, что она несовместима с вашим текущим кодом. Там также вопрос о замене лицензии AGPL, но это выходит за рамки StackOverflow, я хочу ограничить свой ответ на технические вопросы.

Любые другие версии iText между 2.1.7 и 5.0.0, например 4.2.0 и 4.2.1, являются вилами других компаний. Согласно Руководству Apache по загрузке артефактов в Центральный репозиторий (https://maven.apache.org/guides/mini/guide-central-repository-upload.html), эти компании должны были использовать другую группуId, поскольку страница четко заявляет в своем FAQ:

У меня есть исправленная версия проекта foo, разработанная на foo.com, что groupId следует использовать? Когда вы исправляете/изменяете сторонний проект, эта исправленная версия станет вашим проектом и, следовательно, должна быть распределяется по группе. Если вы контролируете какой-либо проект, который у вас был бы разработанный, никогда не под com.foo. См. Выше соображения о идентификатор_группы.

TL; DR Если вы не хотите менять свой код, сообщите своему Maven, чтобы получить iText 2.1.7.

Ответ 3

Мы решили сохранить такую ​​же версию jasperreport и внесли эти изменения в конфликты 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>

Изменить: изменить dependecy на 2.1.7, чтобы быть уверенным, что он скомпилируется в будущем

Ответ 4

JasperReports исправил itext с некоторыми исправлениями ошибок. Таким образом, вы должны добавить исправленный файл itext repo [1] в файл pom/ gradle.

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

Ниже приведен фрагмент gradle для справки при использовании отчета jasper 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/" } }

Ответ 5

У нас та же проблема. Чтобы решить эту проблему, мы удалили параметры прокси-сервера конфигурации Maven и изменили последнюю версию maven-metadata-central (в папке com\lowagie\itext вашего репозитория).

Плохое решение, но, временно, работает:/

Ответ 6

У меня такая же проблема при использовании Maven 2.2.1, я перестроил свой проект с помощью Maven 3.2.3 и его работ!

Вы должны использовать Maven 3 для решения вашей проблемы, ошибка, похоже, устранена в этой версии.