JDK19 - 项目Maven配置注意事项
前言
JDK19 - Virtual Thread 虚拟线程探究 这篇文章里面我们讲到了,虚拟线程在JDK19当中,还是一个非正式的一个语法和功能。它只是一个预览功能。因此当我们使用这个功能的时候,Maven项目也需要经过一些参数的调整。
一. Maven 配置
<properties>
<java.version>19</java.version>
<maven.compiler.source>19</maven.compiler.source>
<maven.compiler.target>19</maven.compiler.target>
<maven.compiler.plugin.version>3.10.1</maven.compiler.plugin.version>
</properties>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.compiler.plugin.version}</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<compilerArgument>--enable-preview</compilerArgument>
<compilerVersion>${java.version}</compilerVersion>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version>
<configuration>
<argLine>
--add-opens java.base/java.lang=ALL-UNNAMED
--add-opens java.base/java.lang.reflect=ALL-UNNAMED
--add-opens java.base/sun.reflect.annotation=ALL-UNNAMED
--add-opens java.base/java.math=ALL-UNNAMED
--add-opens java.base/java.util=ALL-UNNAMED
--add-opens java.base/sun.util.calendar=ALL-UNNAMED
--add-opens java.base/java.io=ALL-UNNAMED
--add-opens java.base/java.net=ALL-UNNAMED
--add-opens java.xml/com.sun.org.apache.xerces.internal.jaxp.datatype=ALL-UNNAMED
</argLine>
</configuration>
</plugin>
比较注意的几个点:
compilerArgument
:请添加一个--enable-preview
参数。否则你的项目编译不过去。maven
版本不能太老。- 添加
argLine
参数:它是用于配置Maven Surefire
插件的参数,用于设置运行测试时的JVM
参数。经过目前的一些小测试,发现上面的几个包,在JDK19
当中,需要添加这类参数,表名代码能够访问和使用这些模块和包中的类和方法。否则就会抛异常,无法使用他们。ALL-UNNAMED
表示将这些模块和包打开给所有的模块,即不限制访问权限。
二. 其他注意事项
1.上面的是Maven
的编译相关配置,你的UT
和编译打包,都会吃这个配置。但是,你项目的真实运行(应用的发布)配置跟它没有啥关系,需要另外再配置。因此,记住你的项目运行VM
参数,也要加上这些配置。
2.如果你的项目使用了lombok
,那么注意,lombok
的版本不要太低,最好在这个以上(每个人的实际情况有所不同):
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
3.同理,tomcat
的版本也要高一点,起码要8.5以上。(每个人的实际情况有所不同)
4.如果使用了JMockit
或者 jacoco
,可能会有相关的报错,建议如下:
- 先看版本(参考):
<jmockit.version>1.43</jmockit.version>
<jacoco.version>0.8.3</jacoco.version>
jmockit
的maven
依赖的引入顺序,应该在junit
之前。- 可以给argLine中添加一个配置:
-javaagent:${settings.localRepository}/org/jmockit/jmockit/${jmockit.version}/jmockit-${jmockit.version}.jar