Link a un progetto completo con il file pom.xml configurato per entrambe le varianti: download.
Passo 1. Modificate il file pom.xml, aggiungendo, per ogni modulo javafx utilizzato, un tag <classifier></classifier> per i diversi sistemi operativi. Esempio con javafx-base:
<!-- https://mvnrepository.com/artifact/org.openjfx/javafx-base -->
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-base</artifactId>
<version>${javafx.version}</version>
<classifier>win</classifier>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-base</artifactId>
<version>${javafx.version}</version>
<classifier>linux</classifier>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-base</artifactId>
<version>${javafx.version}</version>
<classifier>mac</classifier>
</dependency>
${javafx.version} è una variabile che si può utilizzare per non dover copiare molte volte la versione di javafx. Si definisce sempre all'interno del file pom.xml come segue:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>5.8.2</junit.version>
<javafx.version>17.0.2</javafx.version>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
Passo 2. Ripetete l'operazione del passo 1 per tutti i moduli di javafx utilizzati nel progetto.
Da fare anche per il modulo javafx-graphics.
Nota: Dopo aver aggiunto il classifier per javafx-graphics potreste avere la seguente eccezione all'avvio dell'applicazione con IntelliJ:
Graphics Device initialization failed for : es2, sw
Error initializing QuantumRenderer: no suitable pipeline found
java.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
Exception in thread "main" java.lang.RuntimeException: No toolkit found
In tal caso, dopo aver esportato il jar, potete semplicemente commentare le linee del pom relative a javafx-graphics.
Passo 3. Selezionate File -> Project Structure dal menu di IntelliJ. Nella finestra seguente selezionate sulla sinistra Artifacts e cliccate sul pulsante +:
Passo 4. Selezionate JAR -> From modules with dependencies... e inserite le informazioni relative al main del vostro progetto. Assicuratevi che sia selezionato extract to the target JAR e nel campo di testo "Directory for META-INF/MANIFEST.MF" sia selezionata la cartella resources. Cliccate su OK.
Passo 5. Nella schermata successiva assicuratevi che ci siano tutte le librerie utilizzate. Se usate Ikonli l'ordine deve essere quello mostrato qui in basso. Potete disabilitare l'ordinamento automatico cliccando su pulsante con az e poi usare le frecce su, giù per spostare una libreria. Al termine cliccate su Apply e poi OK.
Passo 6. Clicca su Build -> Build Artifacts... e selezionate come Action "Build". Al termine della procedura dovreste trovare la cartella out con il jar. Per eseguirlo, aprite un terminale e digitate
java -jar Laboratorio-2022-05-10-EmailClient.jar
Ripetete i passi 1 e 2 di IntelliJ. Nel file pom.xml, aggiungete:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.6.7</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<classifier>spring-boot</classifier>
<mainClass>
it.unical.demacs.informatica.completejavafxinterface.Main
</mainClass>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Nota: modificare la main class in modo opportuno. La versione del plugin (2.6.7) è stata rilasciata ad Aprile 2022, aggiornate i repository maven o usate versioni precedenti se non dovesse trovarla.
Se usate Ikonli assicuratevi che l'ordine delle dipendenze sia il seguente (prima il pacchetto delle icone e dopo ikonli-javafx):
<dependency>
<groupId>org.kordamp.ikonli</groupId>
<artifactId>ikonli-materialdesign2-pack</artifactId>
<version>12.3.1</version>
</dependency>
<dependency>
<groupId>org.kordamp.ikonli</groupId>
<artifactId>ikonli-javafx</artifactId>
<version>12.3.1</version>
</dependency>
Passo 3. Cliccate con il tasto destro sul progetto di IntelliJ e selezionate Open In -> Terminal.
Nel terminale aperto digitate:
mvn package
Maven creerà una cartella target e all'interno sarà disponibile un file: CompleteJavaFXInterface-1.0-SNAPSHOT-spring-boot.jar che sarà eseguibile con il comando:
java -jar CompleteJavaFXInterface-1.0-SNAPSHOT-spring-boot.jar