那些Maven踩过的坑(一)

1,436 阅读2分钟

前言

好久没有写文章了,最近在弄springBoot的时候用到Maven,在Maven compile的时候,死活报错,提示没有jar包(问题是这个jar包是jdk的呀!!!)wdnm

一、问题出现

有一天我在springBoot中用Maven compile的时候,鲜红的 ERROR\color{red}【ERROR】 映入眼帘,啥情况,怎么就报错了,我什么都没有改啊,一连串的问号出现在脑海。报错如下:

[ERROR] 程序包 com.sun.istack.internal 不存在
[ERROR] 缺少;

找到对应的类下去看看,鼠标一点,诶,这不是进去了吗?啥情况?玩呢?(懵逼三连)而且点进去的是jdk里面他自己的类。 wtf

Maven compile 的时候,会去根据classpath 去编译类,但是在编译的时候,其实执行的也就是调用 javac 去编译对应的类,但是在执行过程中并没有找到对应的jar包,但是在idea中确实是引用了这个jar包(毕竟是jdk自己的包)。根据错误提示,发现这个类所属的jar包是:jre/lib/rt.jar

二、解决问题

既然他没有引用到这个jar包,那能不能手动引用一下呢? 答案是:当然可以。 maven这个项目管理工具,如果没有指定某一个版本的 jdk\color{pink}jdk 的话,他会使用默认的 jdk\color{pink}jdk 来进行处理,有的时候就会出现版本不统一,导致编译出现问题。 我们可以使用 mavencompilerplugin\color{red}maven-compiler-plugin

我们在 pom.xml\color{red}pom.xml 里面的 build\color{red}build 标签里面加上 pluginManagement\color{red}pluginManagement(我这边用的是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>

pom.xml\color{red}pom.xml 文件里面加上之后,重新compile,运行显示 BUILD SUCCESS。

[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  15.469 s

之后项目启动ok。

三、总结

有遇到这种问题的小伙伴,不妨可以试试看这种方法!好了,下次再见!