Скомпилируйте функцию предварительного просмотра JDK12 с Maven

С помощью JDK/12 EarlyAccess Build 10 функции JEP-325 Switch Expressions были интегрированы как функция предварительного просмотра в 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?

Ответ 1

Шаг 1: Можно использовать следующие конфигурации maven для компиляции кода, используя --enable-preview вместе с аргументом --release 12.

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <release>12</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>com.stackoverflow.nullpointer.expression.SwitchExpressions</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Примечание: - Я также должен был убедиться в том, что в моем MacOS мой файл ~/.mavenrc был настроен для отметки java 12 в качестве java по умолчанию, настроенного для maven.

Шаг 2. Выполните команду maven, чтобы собрать jar из классов модулей.

mvn clean verify 

Шаг 3. Используйте командную строку для выполнения основного класса фляги, созданной на предыдущем шаге, как:

java --enable-preview -jar target/jdk12-updates-1.0.0-SNAPSHOT.jar #the last argument being the path to my jar

Это производит вывод, как и ожидалось, как:

enter image description here

Источник на GitHub