web-dev-qa-db-fra.com

Compilez une fonction de prévisualisation JDK12 avec Maven

Avec JDK/12 EarlyAccess Build 1 , les expressions de commutateur JEP-325 ont été intégrées en tant que fonction de prévisualisation dans le JDK. Un exemple de code pour les expressions (comme dans le PEC):

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 étant une énumération comme

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

Le Preview Language et VM Features JEP-12 explique déjà comment une fonctionnalité peut être activée pendant la compilation et l'exécution à l'aide de javac et Java.

Comment peut-on essayer cette fonctionnalité avec Maven?

22
Naman

Step 1: On peut utiliser les configurations maven suivantes pour compiler le code en utilisant le --enable-preview de même que --release 12 argument.

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

Remarque: - Je devais également m'assurer sur mon MacOS que mon ~/.mavenrc Le fichier a été configuré pour marquer Java 12 par défaut Java configuré pour maven.).

Étape 2: Exécutez la commande maven pour construire le fichier jar à partir des classes de module

mvn clean verify 

Step 3: Utilisez la ligne de commande pour exécuter la classe principale du fichier jar créé à l'étape précédente en tant que:

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

Cela produit la sortie comme prévu:

enter image description here

Source sur GitHub

25
Naman