今天用Maven打包项目时发生一个错误:
file: D:\workspace\echoo2.0-xxx-xxx-portal\src\main\java\com\echoo\service\impl\DecDataServiceImpl.java; reason: the Java file contained parse errors
打包报错显示这个类解析错误
在IDEA中没有任何错误提示
问题所在:
代码中用了jdk14
的新特性,一个新的数据结构 record
// 定义了一个record类型的对象
private record Result(byte[] dataKeyByte, byte[] dataIvByte) {}
private Result getResult(DeliveryEncKey deliveryEncKey) throws Exception {
String dataKey = AESGCMUtil.decrypt(AESGCMUtil.hexStringToByteArray(deliveryEncKey.getEncryptionKey()),
aesGCMConf.getMasterKey(), aesGCMConf.getMasterIv());
String dataIV = AESGCMUtil.decrypt(AESGCMUtil.hexStringToByteArray(deliveryEncKey.getIv()),
aesGCMConf.getMasterKey(), aesGCMConf.getMasterIv());
byte[] dataKeyByte = AESGCMUtil.hexStringToByteArray(dataKey);
byte[] dataIvByte = AESGCMUtil.hexStringToByteArray(dataIV);
return new Result(dataKeyByte, dataIvByte);
}
项目用的是jdk17
,这是IDEA没有报错的原因,因为这个语法jdk17
是完全支持的
但是用Maven打包或者编译时却报了无法解析的错
看了一下pom编译配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version> <!-- 使用与你的Maven版本兼容的最新版本 -->
<configuration>
<source>17</source>
<target>17</target>
</configuration>
</plugin>
Maven的jdk
版本
PS D:\workspace\xxxxx> mvn -version
Apache Maven 3.9.1 (2e178502fcdbffc201671fb2537d0cb4b4cc58f8)
Maven home: D:\tools\apache-maven-3.9.1
Java version: 17.0.5, vendor: Oracle Corporation, runtime: D:\tools\JDK17
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
也找不到什么问题
这时候俺再仔细看了一下报错:
Caused by: net.revelc.code.impsort.ex.ImpSortException: file: D:\workspace\dm2.0-api-for-courier-admin-portal\src\main\java\com\hkt\it\ds\ruby\dmg\courieradmin\service\impl\DecDataServiceImpl.java; reason: the Java file contained parse errors
发现这个ImpSortException
好像是一个第三方的异常,
仔细看了看pom文件,发现项目用了一个第三方插件impsort-maven-plugin
<plugin>
<groupId>net.revelc.code</groupId>
<artifactId>impsort-maven-plugin</artifactId>
<executions>
<execution>
<id>sort-imports</id>
<goals>
<goal>sort</goal>
</goals>
<phase>process-sources</phase>
</execution>
</executions>
</plugin>
这个插件是他们用来做代码排序的,注释掉这个插件就build success了
垃圾插件!!!
去这个插件的官方文档看了看
1.9.0版本是2023-05-09日更新的
而jdk14
于2020年3月17日正式发布,它竟然不支持?
垃圾插件!!!