38

JDK/12 EarlyAccess Build 10では、JEP-325 スイッチ式が JDK のプレビュー機能として統合されました。式のサンプル コード (JEP と同様):

Scanner scanner = new Scanner(System.in);
Day day = Day.valueOf(scanner.next());
switch (day) {
    case MONDAY, TUESDAY -> System.out.println("Back to work.") ;
    case WEDNESDAY -> System.out.println("Wait for the end of week...") ;
    case THURSDAY,FRIDAY -> System.out.println("Plan for the weekend?");
    case SATURDAY, SUNDAY -> System.out.println("Enjoy the holiday!");
}

Day列挙型である場所

public enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

プレビュー言語と VM 機能 JEP-12では、javacおよびを使用して、コンパイルおよび実行時に機能を有効にする方法がすでに詳しく説明されていますjava

Maven を使用してこの機能を試すにはどうすればよいですか?

4

2 に答える 2

50

ステップ1

次の Maven 構成を使用して、 + (例: 、 ) 引数を使用してコード--enable-preview--release 12コンパイル13できます1415

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

:- MacOS で、~/.mavenrcmaven 用に構成されたデフォルトの Java として Java 13 をマークするようにファイルが構成されていることも確認する必要がありました。

ステップ2

maven コマンドを実行して、モジュール クラスから jar をビルドします。

mvn clean verify 

ステップ 3

コマンド ラインを使用して、前の手順で作成した jar のメイン クラスを次のように実行します。

java --enable-preview -jar target/forty-bits-of-java-1.0.0-SNAPSHOT.jar

最後の引数は、maven によってビルドされた jar へのパスです。

これにより、次のように期待どおりの出力が生成されます。

ここに画像の説明を入力

(スクリーンショットは前回の実行時のものです。)

GitHub のソース


編集: 不要なデバッグ セッションからの学習では、次の形式で引数を使用します。

<compilerArgs>
    <arg>--enable-preview</arg>
</compilerArgs>

理由は、2 つの異なる引数を指定した場合、構成の検証中に失敗せず、後で見つかった引数が有効な構成を無効にするためです。

<compilerArgs>--enable-preview</compilerArgs>
<compilerArgs>-Xlint:all</compilerArgs>
于 2018-09-08T06:31:13.993 に答える