两者都能打包!!!!!!!
格式不同!!!用处不同!!!
以实验为准,下面开始实验:
maven-compiler-plugin
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
我们来看一下打出的包的结构:
我们可以发现class文件都放在classes文件夹下,依赖的jar包全部都不在这个文件夹下。
我们再来看一下spring-boot-maven-plugin的效果:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.5.7</version>
</plugin>
</plugins>
</build>
我们来看一下打出的包的结构:
我们可以发现class文件都放在classes文件夹下,依赖的jar包全部放在lib下面。
结论
结论1.从是否包含依赖jar包我们可以推断出通过spring-boot-maven-plugin编译打包的产物我们可以直接通过java -jar xxx.jar来直接运行;而通过maven-compiler-plugin编译打包的产物则不可以;
结论2.先给出结论:maven-compiler-plugin编译打包的产物可以被其他项目依赖,而spring-boot-maven-plugin编译打包的产物则不可以。
结论2的实验
我们在另一个项目里面引入上面项目的坐标
下面开始以spring-boot-maven-plugin的产物进行编译打包,执行命令:mvn clean backage
编译失败!!!
我们再以maven-compiler-plugin的产物进行编译打包,同样执行命令:mvn clean backage
编译成功!!!
总结:
这一次实验之前,我只知道maven-compiler-plugin的目的是用来编译的,spring-boot-maven-plugin的目的是用来打包的。但是不知道其中的原因。
那通过上面两个场景下的产物解压出的文件结构我们就可以发现其中的原理
maven-compiler-plugin的产物就是以文件结构存放在一级目录下;
spring-boot-maven-plugin的产物不是,它是以一种约定好的方式存放,用于后期直接运行