[Bug解决]使用maven的坐标依赖时,project标签标红
问题:
在学习 某健康项目 的PDF导出功能的实现时,使用到了jasperResports来实现这个功能,
在实现这个功能的时候所使用到的jar包坐标如下:
<dependency> <groupId>net.sf.jasperreports</groupId> <artifactId>jasperreports</artifactId> <version>6.8.0</version> </dependency>
结果导入进去后,死活识别不出来(maven侧栏的dependencies一致标红),
原因:
后来发现 在maven仓库中对应的这个jar包的文件夹 只有.pom相关的文件,没有jar包和jar包相关的文件(没有.lastUpdated文件),
解决:
1. 修改了 pom核心setting.xml(config/settings.xml)中仓库地址,改为了 阿里云的镜像地址,手动删除本地仓库文件夹,从新导入并下载,可以下载了;
2.这里依赖的是JasperResport的6.8.0版本,直接改为最新的 6.17.0;
问题解决了, 但是新得问题又出现了:
在使用maven的tomcat7插件启动项目的时候,报出了 Invalid byte tag in constant pool: 19的错误;
PS:虽然有这个错误,但是项目确实是可以启动的,而且不影响功能的正常使用
(因为显示Unable to process Jar entry [META-INF/versions/9/module-info.class] from Jar 所对应的jar貌似没有用到)
在网上搜了很久,不同的人有不同的情况, 但多数都是因为log4j版本过高问题导致的不兼容问题,结合我自己的情况 猜测可能是因为我用的6.17.0版本过高导致的;
但是,如果改为低版本的话,编译都通不过;
原因:
这个时候,留意到了 jasperReports 这个包 是依赖了很多包的,其中 只有一个包(itext 2.1.7.js7)下边有条红色的警告线,查询本地仓库,发现全是.lastUpdate文件,reimport很多次也搞不定,所以就在中央仓库上看了下,发现maven中央仓库上边都没有, 查询了网上的资料发现:
这个包应该是 jasperreports为了修复一些bug而打上了补丁的版本,但是并没有release到中央库里,不过这些bug在更高版本里也被修复了,可以使用更高版本的itext来避免这些bug;
解决:
调整了jar包的依赖坐标如下:
这样即降低了jaspereports的jar包版本, 排除了其中的itext 2.1.7.js7(就是一直有问题的那个),然后再依赖一个新的itext包;
<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>
从新启动了maven的tomcat7的插件,也没有兼容性引起的报错了,而且 功能也是能够正常使用;
期间犯过下边的错误:
1. 导入坐标后 因为不能下载 所以就 手动进行了下载,放到了本地仓库的那个文件中去,但发现没什么用,原因是maven是通过索引去定位的(具体我也不懂),需要借助maven指令操作才可以;
2. 当发现具体是哪一个jar包出现问题的时候,没有针对这个包去具体搜索,而是简单的 使用maven的坐标依赖时飘红 这样的语句去网上检索,导致做了很多无用功;
参考了下记博客,表示感谢:
解决飘红问题参考了: https://blog.csdn.net/qq_43705131/article/details/106165960
手动下载mavenjar包并安装参考了: https://www.jianshu.com/p/302dd78133f8
关于jasperreports的这个jar依赖解决方法参考了: https://lewky.blog.csdn.net/article/details/109322686