Java 使用Maven编译并执行JDK预览特性

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+

使用,JEP-325开关表达式已作为预览功能集成到JDK中。表达式的示例代码(在JEP中也是如此):

其中
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>