Java 使用Maven编译并执行JDK预览特性
使用,JEP-325开关表达式已作为预览功能集成到JDK中。表达式的示例代码(在JEP中也是如此): 其中Java 使用Maven编译并执行JDK预览特性,java,maven,switch-statement,java-12,preview-feature,Java,Maven,Switch Statement,Java 12,Preview Feature,使用,JEP-325开关表达式已作为预览功能集成到JDK中。表达式的示例代码(在JEP中也是如此): 其中Day作为枚举 public enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } 本文已经详细阐述了如何使用javac和java在编译和运行时启用功能 如何使用Maven尝试此功能?步骤1 可以使用以下maven配置,使用--enable preview以及--release 12+
Day
作为枚举
public enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
本文已经详细阐述了如何使用javac
和java
在编译和运行时启用功能
如何使用Maven尝试此功能?步骤1
可以使用以下maven配置,使用--enable preview
以及--release 12
+(例如13
,14
,15
)参数编译代码
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>12</release> <!-- <release>13/14/15</release> -->
<compilerArgs>--enable-preview</compilerArgs>
</configuration>
</plugin>
<!-- This is just to make sure the class is set as main class to execute from the jar-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>edu.forty.bits.expression.SwitchExpressions</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
步骤3
使用命令行执行在上一步中创建的jar的主类,如下所示:
java --enable-preview -jar target/forty-bits-of-java-1.0.0-SNAPSHOT.jar
最后一个参数是maven构建的jar的路径
这将产生预期的输出,如下所示:
(屏幕截图来自上一次执行。)
编辑:从不需要的调试会话中学习,使用以下格式的参数:
<compilerArgs>
<arg>--enable-preview</arg>
</compilerArgs>
--启用预览
原因是,如果您指定了两个不同的参数,则在配置验证期间不会失败,而稍后找到的参数会推翻有效配置:
<compilerArgs>--enable-preview</compilerArgs>
<compilerArgs>-Xlint:all</compilerArgs>
——启用预览
-Xlint:全部
要启用预览功能,必须在compilerArgs下的pom.xml中定义--enable preview
下面我将介绍如何使用Java13启用预览功能
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>13</release>
<compilerArgs>
--enable-preview
</compilerArgs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
<configuration>
<argLine>--enable-preview</argLine>
</configuration>
</plugin>
</plugins>
</build>
org.apache.maven.plugins
maven编译器插件
3.8.0
13
--启用预览
org.apache.maven.plugins
maven surefire插件
3.0.0-M3
--启用预览
maven编译器插件doco声明除非默认情况下fork=true和fork=false,否则不会使用编译器RG。所以我不确定上面的工作方式。我的配置文件中的更改是:下面第
行中提到的插件在我的配置文件中不存在,但其余步骤是相同的,这些步骤对我不起作用,在执行javac
时,我仍然必须指定--enable preview--release 13
。否则我会得到错误。surefire插件配置块需要能够运行单元测试并避免由以下原因引起的错误::java.lang.UnsupportedClassVersionError:您的测试未启用预览功能
。
<compilerArgs>--enable-preview</compilerArgs>
<compilerArgs>-Xlint:all</compilerArgs>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>13</release>
<compilerArgs>
--enable-preview
</compilerArgs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
<configuration>
<argLine>--enable-preview</argLine>
</configuration>
</plugin>
</plugins>
</build>