Java – Breve spiegazione delle preview feature del JDK Oracle

Nei recenti JDK Oracle sono state introdotte delle funzionalità che vengono definite preview feature. In questo breve articolo descriverò in generale cosa sono e cosa si deve fare per poterle utilizzare.

Le preview feature sono delle nuove funzionalità, tipicamente del linguaggio Java o della JVM, che vengono fornite in “anteprima” nel JDK di Oracle. Non si tratta di funzionalità incomplete o instabili, sono invece assolutamente complete, ben delineate e pienamente funzionanti ma la loro caratteristica principale è che non sono ancora confermate/permanenti in maniera definitiva. Questo in sostanza significa che Oracle, in base ai vari riscontri che riceve, potrebbe anche decidere di modificare o addirittura rimuovere del tutto queste funzionalità in una release successiva.

Chi vuole usare queste nuove funzionalità, per motivi didattici, per valutazioni o per altro, può quindi certamente farlo ma come si dice, lo fa “a suo rischio e pericolo”, almeno finché queste funzionalità non vengono confermate e rese stabili, definitive in una successiva release del JDK.

La cosa essenziale e importante da sapere è che le preview feature devono essere abilitate esplicitamente sia in fase di compilazione, sia in fase di esecuzione.

Quando si utilizza il compilatore javac del JDK si deve specificare l’opzione --enable-preview e si deve anche specificare la release da utilizzare tramite l’opzione --release NN oppure -source NN.

Ad esempio per usare le preview feature di Java 14 con un JDK 14:

javac --enable-preview --release 14 Sorgente.java

oppure

javac --enable-preview -source 14 Sorgente.java

Compilando con --enable-preview, viene emesso in output un warning come il seguente:

Note: Sorgente.java uses preview language features.
Note: Recompile with -Xlint:preview for details.

Questo warning non si può disabilitare (non mi risulta sia possibile) e serve semplicemente come avvertimento per ribadire il fatto che si sta utilizzando una funzionalità non ancora definitiva.

Quando invece si avvia una applicazione con il comando java si deve nuovamente specificare l’opzione --enable-preview per abilitare il supporto delle preview feature.

Ad esempio:

java --enable-preview nome.qualificato.ClasseConMain

Compilazione con altri strumenti di build

Quando si sviluppa in Java, è più tipico utilizzare degli strumenti di build come Apache Maven, Gradle oppure un apposito IDE es. Eclipse, NetBeans, IntelliJ IDEA (che a sua volta potrebbe anche usare Maven o Gradle).

Non sono in grado di fornire le indicazioni esatte per tutti questi ambienti ma per alcuni posso fornire nelle seguenti sezioni le informazioni su come abilitare le preview feature.

Apache Maven

Con Maven è sufficiente configurare opportunamente il plugin maven-compiler-plugin all’interno del pom.xml di un certo progetto:

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version> ...... </version>
    <configuration>
        <release>14</release>
        <compilerArgs>--enable-preview</compilerArgs>
    </configuration>
</plugin>

Per la versione del plugin (non specificata sopra), può essere necessario valutarla anche in base alla versione del JDK e di Maven. Il tag <release> comunque è disponibile solo a partire dalla versione 3.6 del maven-compiler-plugin.

Eclipse

A partire da Eclipse 4.12 (“2019-06”) è disponibile ufficialmente il supporto alle preview feature, che si possono abilitare in maniera “globale” oppure “per progetto”.

  • Globale: menù “Window” → “Preferences”, poi sezione “Java” → “Compiler” e nella scheda c’è un checkbox denominato “Enable preview features”
  • Progetto: proprietà del progetto, poi sezione “Java Compiler” e nella scheda c’è un checkbox denominato “Enable preview features” (presuppone, naturalmente, l’attivazione di “Enable project specific settings”, altrimenti valgono le configurazioni globali)

In entrambi i casi è anche necessario impostare appropriatamente il “Compiler compliance level”.

Nota: le impostazioni effettuabili nei modi appena descritti sono valide principalmente quando non si sta usando in Eclipse uno specifico strumento di build (es. Maven, Gradle). In pratica ha veramente senso fare queste impostazioni manualmente solo quando si usa una tipologia di progetto nativa di Eclipse. Per Maven/Gradle l’abilitazione delle preview feature invece va indirizzata nei termini del “descrittore di progetto” di questi strumenti (come visto nella sezione dedicata a Maven).