首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jasper中的依赖错误-来自itext的报告

jasper中的依赖错误-来自itext的报告
EN

Stack Overflow用户
提问于 2015-07-09 10:08:10
回答 13查看 90.4K关注 0票数 37

从昨天开始,由于iText jar,我在使用maven编译时遇到了问题。我的项目依赖jasperreports-2.0.1,依赖于itext-1.02b或更高版本。

代码语言:javascript
运行
复制
<dependency>
    <groupId>com.lowagie</groupId>
    <artifactId>itext</artifactId>
    <version>[1.02b,)</version>
    <scope>compile</scope>
</dependency>

这是maven中的日志错误:

代码语言:javascript
运行
复制
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的一条评论,其中提到了一个4.2.2没有jar的版本。

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

编辑: Jasper-reports使用一个开放版本范围:

[1.02b,)

这个范围告诉maven采取库的最新版本。

随着更新从iText添加新版本Pom,不带jar,并编辑maven中心的maven元数据,这个非jar版本将编译崩溃到所有jar,这取决于最新的com.lowagie库。

在本地更新maven元数据-Cental.xml(以及其他元数据,如果您的公司有自己的nexus.public),从...m2\repository\com\lowagie\itext更新到工作的元数据。临时解决方案,直到iText更新元数据或所有对其最新版本有依赖关系的公司更新它的pom

代码语言:javascript
运行
复制
<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>
EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2015-07-14 12:32:11

一个更简单的解决方案可能是升级到较新版本的jasperreports。版本6.1.0依赖于iText:

代码语言:javascript
运行
复制
<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

票数 23
EN

Stack Overflow用户

发布于 2019-04-23 13:18:58

我正在使用gradle,对于当前版本的6.8.2,我得到了以下构建错误:

> Could not find com.lowagie:itext:2.1.7.js6

因此,我添加了http://jaspersoft.jfrog.io/jaspersoft/third-party-ce-artifacts/作为存储库,现在它可以工作了。

代码语言:javascript
运行
复制
repositories {
    mavenCentral()
    maven { url "https://jaspersoft.jfrog.io/jaspersoft/third-party-ce-artifacts/" }
}

dependencies {
    compile 'net.sf.jasperreports:jasperreports:6.8.0'
}

编辑:如果您使用了这个解决方案,突然得到一个错误,比如

代码语言:javascript
运行
复制
> Could not resolve com.lowagie:itext:2.1.7.js6.
    > Could not parse POM http://jaspersoft.jfrog.io/jaspersoft/third-party-ce-artifacts/com/lowagie/itext/2.1.7.js6/itext-2.1.7.js6.pom
       > The element type "hr" must be terminated by the matching end-tag "</hr>".

这是因为jfrog存储库禁用了http,现在只允许https。由于某些原因,这会创建一个包含以下内容的坏pom

代码语言:javascript
运行
复制
<html>
<head><title>308 Permanent Redirect</title></head>
<body>
<center><h1>308 Permanent Redirect</h1></center>
<hr><center>nginx</center>
</body>
</html>

解决方案:将存储库url中的http替换为https

票数 21
EN

Stack Overflow用户

发布于 2015-07-09 13:42:39

问题确实出现在贾斯珀的POM报告中:

代码语言:javascript
运行
复制
<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报告的版本仍然依赖于1.02b和up,那么它肯定是一个非常旧的版本。

jasper-reports对iText的依赖应该更改为:

代码语言:javascript
运行
复制
<dependency>
  <groupId>com.lowagie</groupId>
  <artifactId>itext</artifactId>
  <version>[1.02b,2.1.7]</version>
  <scope>compile</scope>
</dependency>

或者只是:

代码语言:javascript
运行
复制
<dependency>
  <groupId>com.lowagie</groupId>
  <artifactId>itext</artifactId>
  <version>2.1.7</version>
  <scope>compile</scope>
</dependency>

这与这个问题有关:如何告诉Maven使用最新版本的依赖项?页面充满了关于始终使用最新版本作为依赖项的警告。它降低了构建的可重现性。

2.1.7是iText集团NV公司(或其法律前身)与com.lowagie groupId一起发布的最后一个版本的iText。iText的下一个版本是iText groupId公司发布的版本5.0.0,它带有com.itextpdf groupId,这意味着它与当前代码不兼容。还有一个关于AGPL许可变更的问题,但这不在StackOverflow的范围之内,我想将我的回答限制在技术问题上。

iText在2.1.75.0.0之间的任何其他版本,如4.2.04.2.1,都是其他公司的分叉。根据Apache关于将工件上载到中央存储库(https://maven.apache.org/guides/mini/guide-central-repository-upload.html)的指南,这些公司应该使用不同的groupId,正如页面在其FAQ中明确指出的那样:

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

如果您不想更改代码,请告诉Maven只获取iText 2.1.7。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31314373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档