前言
好久没有写文章了,最近在弄springBoot的时候用到Maven,在Maven compile的时候,死活报错,提示没有jar包(问题是这个jar包是jdk的呀!!!)
一、问题出现
有一天我在springBoot中用Maven compile的时候,鲜红的 映入眼帘,啥情况,怎么就报错了,我什么都没有改啊,一连串的问号出现在脑海。报错如下:
[ERROR] 程序包 com.sun.istack.internal 不存在
[ERROR] 缺少;
找到对应的类下去看看,鼠标一点,诶,这不是进去了吗?啥情况?玩呢?(懵逼三连)而且点进去的是jdk里面他自己的类。
在 Maven compile 的时候,会去根据classpath 去编译类,但是在编译的时候,其实执行的也就是调用 javac 去编译对应的类,但是在执行过程中并没有找到对应的jar包,但是在idea中确实是引用了这个jar包(毕竟是jdk自己的包)。根据错误提示,发现这个类所属的jar包是:jre/lib/rt.jar。
二、解决问题
既然他没有引用到这个jar包,那能不能手动引用一下呢? 答案是:当然可以。 maven这个项目管理工具,如果没有指定某一个版本的 的话,他会使用默认的 来进行处理,有的时候就会出现版本不统一,导致编译出现问题。 我们可以使用
我们在 里面的 标签里面加上 (我这边用的是jdk1.8,如果不一样请自行更新版本)。
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<!-- 过期的方法的警告
<compilerArgs>
<arg>-Xlint:deprecation</arg>
</compilerArgs> -->
<compilerArguments>
<!-- 是否输出所有的编译信息(包括类的加载等)-->
<!--<verbose />-->
<!-- 解决maven命令编译报错,因为rt.jar 和jce.jar在jre的lib下面,不在jdk的lib下面,
导致maven找不到(java7以后会出现这个问题),将这2个jar包拷贝到jdk的lib下面估计也好使-->
<bootclasspath>${java.home}\lib\rt.jar;${java.home}\lib\jce.jar</bootclasspath>
</compilerArguments>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
在 文件里面加上之后,重新compile,运行显示 BUILD SUCCESS。
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 15.469 s
之后项目启动ok。
三、总结
有遇到这种问题的小伙伴,不妨可以试试看这种方法!好了,下次再见!