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

Lau*_*lés 15 dependencies jar jasper-reports itext maven

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

<dependency>
    <groupId>com.lowagie</groupId>
    <artifactId>itext</artifactId>
    <version>[1.02b,)</version>
    <scope>compile</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

这是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] 
Run Code Online (Sandbox Code Playgroud)

在这里看到Amedee Van Gasse发表的评论,该评论说明了一个没有jar的4.2.2版本.

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

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

[1.02b)

这个范围说maven采取图书馆最新版本.

随着iText 的更新添加新版Pom没有jar并编辑maven-central的maven-metadata到no-jar版本根据最新的com.lowagie库将编译崩溃到所有jar.

在本地更新您的maven-metadata-central.xml(以及其他元数据,如果您的公司拥有它自己的nexus.public)从... m2\repository\com\lowagie\itext到那个工作.暂时解决方案直到iText更新元数据或所有依赖于它的最新版本公司更新它的pomcom

<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>
Run Code Online (Sandbox Code Playgroud)

Ame*_*sse 14

一个更简单的解决方案可能是升级到更新版本jasperreports.版本6.1.0对iText有依赖性:

<dependency>
    <groupId>com.lowagie</groupId>
    <artifactId>itext</artifactId>
    <version>2.1.7.js2</version>
    <scope>compile</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

没有更多的"浮动"依赖iText,它是为jasperreports定制的版本!

有关完整内容,请参见http://mvnrepository.com/artifact/net.sf.jasperreports/jasperreports/6.1.0pom.xml.

  • Maven 存储库不再提供修补后的 iText 版本... (4认同)
  • 这是不幸的。使用 Jasper Reports 或使用其他解决方案之一。 (2认同)

Ame*_*sse 13

问题确实存在于碧玉报道的POM中:

<dependency>
  <groupId>com.lowagie</groupId>
  <artifactId>itext</artifactId>
  <version>[1.02b,)</version>
  <scope>compile</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

Jasper-reports 2.1.7至少从2012年11月开始分发(修改过的)iText版本(如果内存对我很好),所以如果你的jasper-reports版本仍然依赖于1.02bup,那么它必须是一个非常古老的版本.

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

<dependency>
  <groupId>com.lowagie</groupId>
  <artifactId>itext</artifactId>
  <version>[1.02b,2.1.7]</version>
  <scope>compile</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

要不就:

<dependency>
  <groupId>com.lowagie</groupId>
  <artifactId>itext</artifactId>
  <version>2.1.7</version>
  <scope>compile</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

这涉及到这个问题:我如何告诉Maven使用最新版本的依赖项? 该页面充满了关于始终使用最新版本的依赖关系的警告.它降低了构建的可重复性.

2.1.7是iText Group NV(或其合法前身)与com.lowagiegroupId 公司发布的iText的最后一个版本.由iText Group NV公司发布的下一版iText是5.0.0带有com.itextpdfgroupId的版本,这意味着它的二进制文件与您当前的代码不兼容.还有AGPL许可证更改的问题,但这超出了StackOverflow的范围,我想限制我对技术问题的回答.

任何其他版本的iText之间,2.1.75.0.0,4.2.0等等4.2.1,是其他公司的分叉.根据Apache将工件上传到中央存储库的指南(https://maven.apache.org/guides/mini/guide-central-repository-upload.html),这些公司应该使用不同的groupId,因为页面清楚在他们的FAQ中陈述:

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

TL; DR如果您不想更改代码,请告诉您的Maven只能获得iText 2.1.7.


das*_*eks 11

我正在使用 gradle,对于当前版本,6.8.2我收到以下构建错误:
> Could not find com.lowagie:itext:2.1.7.js6

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

repositories {
    mavenCentral()
    maven { url "http://jaspersoft.jfrog.io/jaspersoft/third-party-ce-artifacts/" }
}

dependencies {
    compile 'net.sf.jasperreports:jasperreports:6.8.0'
}
Run Code Online (Sandbox Code Playgroud)


asw*_*zen 9

我遇到了同样的问题,

刚刚意识到https://jaspersoft.jfrog.io/artifactory/third-party-ce-artifacts公众无法访问该目录,您需要将其更改artifactoryjaspersoft目录。

对于 Maven,您可以使用以下存储库pom.xml

<repositories>
  <repository>
    <id>jaspersoft-third-party</id>
    <url>https://jaspersoft.jfrog.io/jaspersoft/third-party-ce-artifacts/</url>
  </repository>
</repositories>
Run Code Online (Sandbox Code Playgroud)


Kan*_*ane 6

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 "https://jaspersoft.jfrog.io/artifactory/third-party-ce-artifacts/" }
    maven { url "http://jasperreports.sourceforge.net/maven2/" }
}
Run Code Online (Sandbox Code Playgroud)


Lau*_*lés 5

我们决定保持相同的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>
Run Code Online (Sandbox Code Playgroud)

编辑:将依赖性更改为2.1.7以确定它将来会编译


小智 5

我正在对一些遗留代码进行维护,我遇到了同样的问题。我找到的解决方案是将以下内容添加到pom.xml

<repositories>
  <repository>
    <id>jasper-3rd-party</id>
    <name>Jasper3rdParty</name>
    <url>http://jaspersoft.jfrog.io/jaspersoft/third-party-ce-artifacts/</url>
  </repository>
</repositories>

<dependencies>

  <dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports</artifactId>
    <version>6.12.2</version>
  </dependency>

  <!-- More dependencies like: commons-collections4, org.apache.xmlgraphics, etc -->

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

</dependencies>
Run Code Online (Sandbox Code Playgroud)

用于测试此代码的 JasperReports 版本已于 2020 年 3 月发布。希望这可以帮助!

  • 为什么他们继续依赖 itext 的自定义版本而不发布它们?这太痛苦了... (2认同)

Jan*_*Jan 5

这适用于最新的 jasper-reports 版本,6.17.0特别maven 3.8.1jasperreports-pluginfrom com.alexnederlofin 版本2.8

<project>
    ...
    <repositories>
        <!-- JasperSoft, they modified a standard library for their own special needs -->
        <repository>
            <id>jaspersoft-third-party</id>
            <url>https://jaspersoft.jfrog.io/jaspersoft/third-party-ce-artifacts/</url>
        </repository>
    </repositories>

    <pluginRepositories>
        <!-- JasperSoft, they modified a standard library for their own special needs -->
        <pluginRepository>
            <id>jaspersoft-third-party</id>
            <url>https://jaspersoft.jfrog.io/jaspersoft/third-party-ce-artifacts/</url>
        </pluginRepository>
    </pluginRepositories>
    ...
Run Code Online (Sandbox Code Playgroud)

重要的是要知道不仅有,<repositories>而且<pluginRepositories>您可能还必须提供(取决于您的设置和传递依赖项)。