Ошибка зависимости в 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>
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.lowagiegroupId. Следующая версия iText, выпущенная компанией iText Group NV, была version5.0.0, с идентификаторомcom.itextpdfgroupId, что означает, что она двоична и несовместима с вашим текущим кодом. Есть также вопрос об изменении лицензии на 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 для решения вашей проблемы, ошибка, кажется, решена в этой версии.
Comments