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



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

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

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

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

Править: Яшма-отчеты используются различные версии:

[1.02 b,)

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

С обновлением из iText добавление новой версии Pom без jar и редактирование Maven-метаданных maven-central для этой версии без jar завершает компиляцию для всех jar в зависимости от формы последнего com.библиотека lowagie.

Локальное обновление maven-metadata-central.xml (и другие метаданные, если у вашей компании есть собственный nexus.публика) от ...m2 репозиторийcomlowagieitext к этому завод. Временное решение до тех пор, пока 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>
209   6  

6 ответов:

Гораздо более простым решением может быть обновление до более новой версии 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.

Проблема действительно в ПОМ яшмы-сообщает:

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

Jasper-reports распространяет (модифицированную) сборку iText 2.1.7 по крайней мере с ноября 2012 года (если память мне не изменяет), поэтому, если ваша версия jasper-reports все еще зависит от 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, была version 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 ), эти компании должны были использовать другой groupId, как страница четко заявляет в своем FAQ:

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

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

Мы решили сохранить ту же версию jasperreport и внесли эти изменения в conflicteds 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: измените dependecy на 2.1.7, чтобы быть уверенным, что он будет компилироваться в будущем

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

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

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

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

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

    Ничего не найдено.

Добавить ответ:
Отменить.