我们在一个项目中使用iText生成PDF报告,准确地说是4.2.1版本,因为它是最后一个免费版本。
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>4.2.1</version>
</dependency>
当我今天早上在一台新机器上克隆存储库时,我遇到了很多编译器错误,因为maven重定向到5.5.6版本,并且导入失败。在我们的研究中,我们发现maven中心的pom文件在上周被更改了。从现在开始,像以前那样添加jar依赖似乎是不可能的了。
谁能告诉我,如果还有一种方法,通过maven在4.2.1版集成iText ?
如本文所述,发布ittext的人分叉了4.x版本。我没有遵循Apache解释的规则:
我有一个在foo.com开发的foo项目的补丁版本,我应该使用什么groupId ?
当你修补/修改第三方项目时,这个打过补丁的版本成为您的项目,因此应该是在您控制的组id下分发,就像您拥有的任何项目一样发达的,从来没有在com.foo下。请参阅上面关于groupId .
他们使用groupId发布了一个非官方版本的ittext,这让人们相信他们使用的是原始版本的ittext,但事实并非如此。这个错误已经造成了很多混乱和挫折。
为了避免混淆,ittext Group已经回收了groupId,这样就没有第三方可以将侵犯第三方权利的软件甚至恶意软件引入您的代码库(这是您允许Maven自动升级时所承担的风险)。
您断言iText 4.2.1是最后一个免费版本是不正确的。在iText 5之前,iText版本存在一些严重的问题,但这是另一个讨论,也是JavaOne 2015会议演讲的主题,题为IANAL:开发者应该了解的知识产权和法律。
在任何情况下,最简单的解决方案是将依赖项更改为:<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>[1.02b,2.1.7]</version>
<scope>compile</scope>
</dependency>
更多的背景信息,请参阅jasper-reports from text中Dependency error的答案
第一解决方案
您可以在本地下载jar,然后使用以下命令在本地安装它。
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id>
-DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>
使用你喜欢的groupId, artifactId, version和packaging
在本例中:
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>
我知道这是一个旧线程,但我刚刚清除了我的。m2文件夹由于一些随机问题,不幸的是,然后得到了"工件com.lowagie: ittext:jar:4.2.1已被重新定位到com.itextpdf:itextpdf:jar:5.5.6"
在试图记住我们是如何修复的时候遇到了这个问题,所以我想我应该发布解决方案,我们不得不停止它试图升级。
Goto % userprofile % .m2 repository com lowagie itext 4.2.1
准备编辑文本-4.2.1。从底部删除下面的部分,它不会再打扰你,你可以愉快地使用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>
我在使用Gradle时也遇到了同样的问题。
在我的构建。Gradle文件
compile 'com.lowagie:itext:4.2.1'
将获取itextpdf-5.5.6.jar
运行命令
gradle myapp:dependencies
将显示像这样的传递依赖:
--- com.lowagie:itext:4.2.1
--- com.itextpdf:itextpdf:5.5.6
我的解决方案是将原始的ittext -4.2.1.jar副本上传到我们的Nexus存储库,并给它一个不同的版本号。