问题与分析
某日忽然发现用maven编译项目报错如下:
failed to collect dependencies at net.sf.jasperreports:jasperreports:jar:6.10.0
-> com.lowagie:itext:jar:2.1.7.js7: failed to read artifact descriptor for com.lowagie:itext:jar:2.1.7.js7:
could not transfer artifact com.lowagie:itext:pom:2.1.7.js7
一开始以为是网络不好连接不上远程库,或者远程库没有该jar包,后来发现在maven中央仓库里也没找到2.1.7.js7
版本的itext
依赖。
在stack overflow上查询后发现有不少人遇到同样的问题,都是由于使用了某个版本的jasperreports
,最终导致了该错误。
由于在jasperreports的pom文件里指定了2.1.7.js7
版本的itext
依赖,而目前的maven中央仓库或其他镜像仓库里是不存在这种带有js7
等后缀版本。
该版本是jasperreports为了修复一些bug而打上了补丁的版本,但是并没有release到中央库里,不过这些bug在更高版本里也被修复了,可以使用更高版本的itext来避免这些bug。
解决方法
排除jasperreports中的itext依赖并自行指定版本,
- pom如下:
<dependency> <groupid>net.sf.jasperreports</groupid> <artifactid>jasperreports</artifactid> <version>6.10.0</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>
这里的itext版本根据自身实际情况指定,目前itext已停止维护,并从4.2.2之后的版本开始从com.lowagie.itext
迁移到com.itextpdf.itextpdf
,有需要的话可以使用更高版本的itextpdf依赖,
- pom如下:
<dependency> <groupid>jasperreports</groupid> <artifactid>jasperreports</artifactid> <version>6.10.0</version> <!--(or higher)--> <exclusions> <exclusion> <groupid>com.lowagie</groupid> <artifactid>itext</artifactid> </exclusion> </exclusions> </dependency> <dependency> <groupid>com.itextpdf</groupid> <artifactid>itextpdf</artifactid> <version>5.5.13</version> <!--(or higher)--> </dependency>
参考链接:
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论