来自itext的jasper-reports中的依赖性错误

从昨天我有问题编译与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的一个评论,它提到了一个没有jar的4.2.2版本。

为什么1.02b版本附加到4.2.2?

编辑:贾斯珀报告使用一个开放的版本范围:

[1.02b)

这个范围说要带图书馆最新版本。

随着iText的更新添加新版本Pom没有jar和编辑maven-central的Maven-metadata到无jar版本崩溃编译到所有jar取决于最新的com.lowagie库。

更新本地maven-metadata-central.xml(以及其他元数据,如果你的公司拥有自己的nexus.public)从… m2 \ repository \ com \ lowagie \ itext到这个工作。 暂时解决,直到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> 

更简单的解决scheme可能是升级到更新版本的jasperreports 。 版本6.1.0对iText有这种依赖性:

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

对iText没有更多的“浮动”依赖,这是一个为jasper报告定制的版本!

有关完整的pom.xml请参阅http://mvnrepository.com/artifact/net.sf.jasperreports/jasperreports/6.1.0

问题确实在碧玉报告的POM中:

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

Jasper-reports自2012年11月以来(如果内存服务的很好)发布iText 2.1.7 (修改后的)版本,所以如果你的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使用最新版本的依赖关系? 该页面充满了关于始终使用最新版本的依赖性的警告。 它降低了你的构build的可重复性。

2.1.7是iText Group NV(或其合法前任)发布的iText的最后一个版本,其中包含com.lowagie groupId。 iText Group NV公司发布的iText的下一个版本是5.0.0 ,带有com.itextpdf groupId,这意味着它与您当前的代码是二进制不兼容的。 还有一个更改AGPL许可的问题,但这不在StackOverflow的范围内,我想限制我对技术问题的回答。

2.1.75.0.0之间的任何其他版本的iText,如4.2.04.2.1 ,都是其他公司的分支。 根据Apache的上传工件到中央仓库的指南( https://maven.apache.org/guides/mini/guide-central-repository-upload.html ),这些公司应该使用了不同的groupId,因为页面清晰在他们的FAQ中指出:

我有在foo.com开发的foo项目的补丁版本,应该使用什么groupId? 当你修改/修改第三方项目时,修补后的版本将成为你的项目,因此应该像你开发的任何项目一样,在你所控制的groupI下进行分发,而不是在com.foo下。 请参阅上面有关groupId的注意事项。

TL; DR如果你不想改变你的代码,告诉你的Maven只能得到iText 2.1.7。

我们决定保持相同的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> 

编辑:将依赖关系更改为2.1.7以确保将来编译

JasperReports修补了一些错误修复的itext。 所以你必须在你的pom / gradle文件中添加修补过的itext repo [1]。

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

下面是使用jasper report 6.1.1时的参考的gradle片断。 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/" } }

我们有同样的问题。 为了解决这个问题,我们已经删除了Mavenconfiguration的代理参数,并更改maven-metadata-central的最新版本(在你的仓库文件夹com \ lowagie \ itext中)。

一个不好的解决scheme,但是,暂时工作:/

使用Maven 2.2.1时遇到同样的问题,我使用Maven 3.2.3及其工程重build了我的项目!

你必须使用Maven 3来解决你的问题,这个错误似乎可以在这个版本中得到解决。