iText版本4.2.1在maven中央存储库中重定向

时间:2015-07-13 14:37:11

标签: java maven itext

我们在其中一个项目中使用iText生成PDF报告,正好是版本4.2.1,因为它是最后一个免费版本。

<dependency>
   <groupId>com.lowagie</groupId>
   <artifactId>itext</artifactId>
   <version>4.2.1</version>
</dependency>

当我今天早上在新机器上克隆存储库时,我遇到了很多编译器错误,因为maven重定向到版本5.5.6并且导入失败。在我们的研究中,我们发现,maven central的pom文件在上周发生了变化。从现在开始,似乎不可能像以前那样添加jar依赖。

有人能告诉我,如果还有办法通过maven在4.2.1版本中集成iText吗?

4 个答案:

答案 0 :(得分:6)

根据记录here,发布iText forks版本4.x.y的人没有关注the rules as explained by Apache

  

我有一个foo.com开发的foo项目的补丁版本,我应该使用哪个groupId?

     

修补/修改第三方项目时,   修补版本成为你的项目,因此应该   在您控制的groupId下分发您可能拥有的任何项目   开发,从未在com.foo。见上述考虑因素   的groupId。

他们使用 groupId 发布了一个非官方的iText版本,导致人们相信他们使用的是iText的原始版本,但事实并非如此。这个错误引起了很多困惑和挫折。

为了避免混淆,iText Group已经收回 groupId ,这样任何第三方都无法将侵犯第三方权利甚至恶意软件的软件引入您的代码库(这是您在冒险时承担的风险)允许Maven自动升级。

您对iText 4.2.1 最后一个免费版的指控不正确。在iText 5之前的iText版本存在一些严重问题,但这是另一个讨论,也是JavaOne 2015上题为IANAL: What Developers Should Know About IP and Legal的会议讨论的主题。

在任何情况下,最简单的解决方案是让您将依赖性更改为:

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

有关更多背景信息,请参阅this answer以回答Dependency error in jasper-reports from itext

答案 1 :(得分:2)

第一个解决方案

您可以在本地下载jar,然后使用以下命令在本地安装它。

mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> 
-DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>

使用你喜欢的groupId,artifactId,版本和包装。

在这种情况下:

mvn install:install-file -Dfile=itext.jar -DgroupId=com.lowagie
-DartifactId=itext -Dversion=4.2.1 -Dpackaging=jar

第二个解决方案:

您也可以在本地下载jar并使用以下依赖关系组

引用它
<dependency>
    <groupId>com.lowagie</groupId>
    <artifactId>itext</artifactId>
    <version>4.2.1</version>
    <scope>system</scope>
    <systemPath>/PATHTOJAR/itext.jar</systemPath>
</dependency>

答案 2 :(得分:0)

我在使用Gradle时遇到了同样的问题。

在我的build.gradle文件中的依赖项下

compile 'com.lowagie:itext:4.2.1'

将获取它extpdf-5.5.6.jar

运行命令

gradle myapp:dependencies

将显示出这样的传递依赖:

\--- com.lowagie:itext:4.2.1
     \--- com.itextpdf:itextpdf:5.5.6

我的解决方案是将原始itext-4.2.1.jar的副本上传到我们的Nexus存储库中,并给它一个不同的版本号。

答案 3 :(得分:0)

我知道这是一个旧线程,但由于一些随机问题,我刚刚清除了我的 .m2 文件夹,不幸的是,“神器 com.lowagie:itext:jar:4.2.1 已重新定位到com.itextpdf:itextpdf:jar:5.5.6"。

在尝试记住我们如何修复时在这里遇到了这个问题,所以我想我会发布解决方案,我们不得不阻止它尝试升级。

转到 %UserProfiles%\.m2\repository\com\lowagie\itext\4.2.1\

编辑 itext-4.2.1.pom 并从底部删除以下部分,它不会再次打扰您,您可以愉快地使用 4.2.1 :-

  <distributionManagement>
      <relocation>
          <groupId>com.itextpdf</groupId>
          <artifactId>itextpdf</artifactId>
          <version>5.5.6</version>
          <message>After release 2.1.7, iText moved from the MPLicense to the AGPLicense.
          The groupId changed from com.lowagie to com.itextpdf and the artifactId from itext to itextpdf.
          See http://itextpdf.com/functionalitycomparison for more information.</message>
      </relocation>
  </distributionManagement>