2012-09-02 12 views
7

Ho cercato tutto il giorno di trasformare la mia applicazione javafx in un file jar. Sto usando Java 1.7 aggiornamento 7.Intellij Javafx artefatto: come si fa?

Oracle ha some information, ma sembra tutto sparsi dappertutto. IntelliJ è quasi facendo il lavoro, ma ottengo il seguente errore:

java.lang.NoClassDefFoundError: javafx/application/Application 

che sembra dire che ho bisogno di dire java dove il jfxrt.jar è ... Se posso aggiungere questo barattolo al mio informazioni classpath per la build manifesta in IntelliJ - ctrl + shift + alt + s -> Artefatti -> scheda layout di uscita -> Class Path, allora ottengo un altro errore:

Could not find or load main class com.downloadpinterest.code.Main 

sembra strano dover includere jfxrt.jar in il mio percorso di classe però ...

Ho provato anche a creare uno script ant, ma mi sento come IntelliJ è 90 % del modo in cui ci sono - e ho solo bisogno di un po 'di aiuto per capire perché ho bisogno di includere jfxrt.jar, e perché la mia classe principale non viene trovata (suppongo di doverlo aggiungere al classpath in qualche modo ?).

Qualcuno potrebbe indurmi a capire cosa sta succedendo? Avevo una GUI base prima della quale funzionava bene, ma JavaFX sembra complicare la vita!

risposta

4

L'ipotesi è corretta, è necessario aggiungere JavaFX al classpath.
Si trova in [JDK]/jre/lib/jfxrt.jar.

Per fornire JavaFX in fase di esecuzione, è possibile bundle con l'applicazione, illustrata in questo Oracle guideo rendere Java 7 Update 6 un requisito per la vostra applicazione, quindi aggiungere [JAVA_HOME]/lib/jfxrt.jar al classpath al più presto dell'applicazione.

La prima opzione significa più lavoro per te, ma è assolutamente sicuro che tutti gli utenti abbiano la stessa versione della libreria - e puoi anche raggruppare il JRE, mentre ci sei. La seconda versione non offre questa certezza, ma è più facile da realizzare.

Come variante alla seconda opzione - se il raggruppamento di JRE è effettivamente possibile per voi -, è possibile anche solo raggrupparlo nella distribuzione e quindi includere uno shell-script/batch-file/eseguibile-wrapper per rendere il vostro programma usarlo. In questo modo, si ottiene tutta la certezza dall'opzione I con solo un moderato aumento di difficoltà dall'opzione II.

+0

Ho notato che quando faccio questo Intellij semplicemente aggiunge una riga nel manifest jar che ha il classpath (non raggruppa jfxrt nel mio jar). Sembra che questo sarà un problema quando altri scaricano il mio programma e provano ad usarlo - ad esempio alcune persone hanno mac, alcuni linux, alcune finestre e il percorso di jfxrt.jar sarà diverso per persone diverse. Sai comunque per risolvere questo problema? –

+0

Ho aggiornato la risposta per coprirlo. –

+0

Grazie, ho chiesto a oracle se c'è un esempio completo di formica ovunque, mentre sono riuscito a creare solo lo script ant. Ne posterò uno se ne trovo uno o riesco a crearne uno! –

4

Ho avuto lo stesso problema. Ma ho trovato questo post sul blog: Packaging JavaFX 2 Applications in IntelliJ IDEA 12.1 che mostra come farlo in Intellij 12.1

Apparentemente IntelliJ ha la capacità di produrre uno speciale artefatto "Applicazione JavaFX". Raggruppa automaticamente tutto ciò di cui ha bisogno all'interno del tuo file jar.

Problemi correlati