解决Springboot打包时,带⼊java源⽂件的问题
解决Springboot打包时,带⼊java源⽂件的问题
⼀、问题
⽆意反编译基于springboot打出的jar包时,发现jar包中包含了java源⽂件代码。
⼆、定位问题
1. 分析了下执⾏打包的命令是mvn clean install,这中间实际执⾏的maven插件较多,如下图所⽰。
2. 进⼀步定界,发现是classes⽬录下有java源码所致。谁会把java源码拷贝⾄classes⽬录呢?
3. 观察上述插件的执⾏过程,很⾃然想到是maven-resources-plugin在作祟。上述resources插件执⾏了2次。
4. 猜想是默认的resources插件使⽤了1次,我本地的配置⼜执⾏了1次。我本地配置如下:
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>process-sources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/classes</outputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
5. 为了验证这个猜想,同时只让⾃⼰的配置⽣效,把<id>和<goal>标签的值分别改成系统默认的default-resources、resources。再次
执⾏,果然发现只执⾏了1次resources插件。
6. 到了这⾥,问题基本上已经解决了。是因为⾃⼰配置的resources插件和默认的配置不⼀致,导致执⾏了2遍,默认的始终会把java⽂
件打⼊classes⽬录下。这是因为我的maven⼯程的l配置了springboot为⽗pom。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
<relativePath/>
</parent>
7. 点开spring-boot-starter-parent的配置(按住ctrl键,⿏标移动到spring-boot-starter-parent⽂字上,我⽬前使⽤的是idea)。发
现springboot下的resources插件配置如下:
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<delimiters>
<delimiter>${resource.delimiter}</delimiter>
</delimiters>
<useDefaultDelimiters>false</useDefaultDelimiters>
</configuration>
</plugin>
8. 由于时间⽐较紧,没有仔细研究。
三、解决⽅案
1. ⾃定义resources插件的配置,覆盖mvn默认的配置:
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>default-resources</id>
<phase>process-sources</phase>
<goals>
<goal>resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/classes</outputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
2. 注意,不要修改<id>和<goal>中的值。
四、收获总结
1. 项⽬中经常会碰到maven插件的问题,尤其是现在maven插件⼜多,配置⼜⽐较复杂。当然我们⼀般都是使⽤默认的简单配置。
2. 碰到问题的时候,需要静下⼼来仔细研究下,出问题的根本原因,真正的解决⽅案也并不会太复杂。
五、参考资料
maven打包本地jar包

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。