Come creare un JAR eseguibile per applicazioni JavaFX

Il formato JAR

Come sappiamo, JavaFX non è più integrato in JDK dalla remota versione 11. Questo ha creato nel tempo qualche piccolo problema non tanto nello sviluppo, quanto nella realizzazione di eseguibili dei progetti pronti. JAR sappiamo essere il file eseguibile per eccellenza delle nostre applicazioni Java, portabile poi su tutte le piattaforme Windows/Linux/Mac. Per la sua caratteristica di portabilità, il file JAR deve contenere al suo interno tutto il necessario per far eseguire il software che c’è nel suo contenuto, dalle semplici classi che abbiamo sviluppato, fino alla librerie a cui ci siamo appoggiati. Va da, se infatti, che e JRE o JDK siano presenti ed eseguibili un po’ su tutte le macchine, ma non tutte hanno tra le proprie librerie anche quelle JavaFX. Questo è un piccolo quanto risolvibile problema, ma è anche il motivo per cui molti preferiscono continuare a sviluppare con le Java Swing, anche se ormai obsolete, proprio per assecondare in modo semplice la compatibilità delle app.

Prepariamo il progetto

Per procedere all’esportazione, dobbiamo aggirare il “pacchettatore” di JavaFX. I progetti creati in automatico da IntelliJ prevedono sempre una classe Controller, un file FXML ed una classe Application (in genere HelloController.java e HelloApplication.java). Quest’ultima in realtà contiene una classe custom che eredita da Application e contiene il metodo statico main che nei nostri esercizi siamo abituati a lanciare con run. Dobbiamo fare un piccolo step in più. Creiamo una classe con un nome a piacere App ad esempio (o Main stesso ad esempio). Dentro creiamo il metodo statico main e lanciamo il metodo main della classe controller del nostro progetto.

package com.centinaro.demo;

public class App {

    public static void main(String[] args) 
   {
        String dummy[] = {};
        HelloApplication.main(dummy);
    }
}

Se riceviamo un errore possiamo seguire il suggerimento “Remove 1st parameter from method main”. A questo punto abbiamo due classi eseguibili, una direttamente afferente le librerie JavaFX, una invece non direttamente legata alla libreria GUI. Sarà quest’ultima il nostro “trucco” per estrarre tutte le dipendenze JavaFX.

L’Artifact di IntelliJ

Esistono diversi modi per esportare in JAR un progetto ma il più semplice che indichiamo in questo articolo prevede l’uso di IntelliJ. In questo caso, c’è da configurare un Artifact, un particolare procedimento che consente di esportare tutto il necessario di un progetto, librerie esterne incluse. Se siamo già dentro il nostro progetto, da menù, andiamo su File -> Project Structure o digitiamo la combinazione di tasti CTRL+Alt+Maiusc+S. Si apre una finestra con un menù laterale Project Settings. Posizioniamoci sulla voce Artifacts. In alto in una colonna centrale compaiono dei tasti + – clicchiamo sul più e nella tendina che si apre clicchiamo JAR ->From modules with dependecies. La tentazione di usare le voci che contengono la parola JavaFX ma funzionano solo con le versioni di Java sotto la 11 (mentre scriviamo siamo alla 19), quindi probabilmente sono inutili in molti casi. A seconda delle versione di IntelliJ, potrebbe chiedervi di creare un file MANIFEST, fatelo.

Nella finestra sopra in realtà dobbiamo selezionare solo Main Class:, se tutto va liscio cliccando sulla cartellina a destra di questa tendina ci farà selezionare una delle classi o HelloApplication o l’ultima, App. Scegliamo quest’ultima ovviamente. Dovrebbe contestualmente riempire anche la riga con la dicitura META-INF/MANIFEST.MF. Diamo OK. Ci troveremo davanti una schermata come quella qui sotto.

Se non abbiamo particolari esigenze di rinominare i percorsi, clicchiamo Apply/OK. Teniamo a mente la directory dove ci verrà estratto il JAR, ovvero dentro al nostro progetto nella sottocartella out/artifacts/… Siamo pronti ad estrarre il nostro JAR.

Estraiamo l’Artifact

Se tutte le configurazioni sono andate in porto, ci si apre una nuova voce nel menù Build, ovvero Build->Build Artifacts…

Nella tendina che si apre scegliamo la Action Build (o Rebuild per le volte successive…). In pochi secondi, IntelliJ frulla il nostro progetto e rilascia il jar nella cartella precedentemente segnalata. Non ci resta che procedere in due modi: tasto destro sul file e rendiamolo eseguibile col tab Permessi e quindi ci basterà clicarci doppio col mouse, o da console digitiamo java -jar nomefile.jar. Si dovrebbe aprire la nostra interfaccia senza troppi problemi finalmente.

Ultima modifica 26 Maggio 2023