JavaFX Fat Jar

Alles was die NetBeans IDE bei der Entwicklung von JavaFX betrifft

Moderator: wegus

Antworten
Benutzeravatar
wegus
Beiträge: 458
Registriert: 26.09.2006, 09:07

JavaFX Fat Jar

Beitrag von wegus » 21.08.2014, 19:20

moin,

ich wollte eigentlich mit einem Standard ant-task ein fat/single jar einer Anwendung erzeugen. Das klappt sonst prima. Wenn ich jedoch mit Netbeans 8 eine FX Application erstelle, nichts modifziere außer meinem ANT-Task hinzuzufügen. Dann pasieren zwei Dinge:

Zum einen wird bemängelt das dist/lib leer ist ( was stimmt) und wenn ich das Verzeichnis ausnehme dann entsteht zwar eine jar-Datei, die ist aber deutlich zu klein und ich erhalte beim Start die Meldung:

Fehler: Hauptklasse com.javafx.main.Main konnte nicht gefunden oder geladen werden


Ich verwende Oracle Java 8 als VM.

Muß JavaFX dazu noch per lib eingebunden werden? Ich dachte FX gehört inzwischen zum JRE? Weiß jemand was ich ändern muß?
Mein ant-task ist folgender aus dem Web der es sonst immer tut:

Code: Alles auswählen

  <target name="package-for-store" depends="jar">

        <!-- Change the value of this property to be the name of your JAR,
             minus the .jar extension. It should not have spaces.
             <property name="store.jar.name" value="MyJarName"/>
        -->
        <property name="store.jar.name" value="FXGrid"/>


        <!-- don't edit below this line -->

        <property name="store.dir" value="store"/>
        <property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>

        <echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/>

        <delete dir="${store.dir}"/>
        <mkdir dir="${store.dir}"/>

        <jar destfile="${store.dir}/temp_final.jar" filesetmanifest="skip">
            <zipgroupfileset dir="dist" includes="*.jar"/>
 <!--           <zipgroupfileset dir="dist/lib" includes="*.jar"/>
-->
            <manifest>
                <attribute name="Main-Class" value="${main.class}"/>
            </manifest>
        </jar>

        <zip destfile="${store.jar}">
            <zipfileset src="${store.dir}/temp_final.jar"
            excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
        </zip>

        <delete file="${store.dir}/temp_final.jar"/>

    </target>
Wenn etwas zu einfach klingt um wahr zu sein, dann ist es oft auch nicht wahr!

Benutzeravatar
smurfi
Site Admin
Beiträge: 1626
Registriert: 29.06.2006, 11:33
Wohnort: Wuppertal
Kontaktdaten:

Re: JavaFX Fat Jar

Beitrag von smurfi » 22.08.2014, 12:22

Hallo,

kann dir zwar nicht direkt bei deinem Problem helfen aber die 'jfxrt.jar' ist seit Version 8 im Classpath enthalten.

Gruß
Michael

Benutzeravatar
wegus
Beiträge: 458
Registriert: 26.09.2006, 09:07

Re: JavaFX Fat Jar

Beitrag von wegus » 22.08.2014, 12:57

ja, ich danke Dir! Ich weiß, das sieht man ja auch unter Libraries direkt. Drum war ich so verblüfft, dass das so offenbar nicht geht. Ich habe gerade wenig Zeit, mache aber mal einen Test wo ich die explizit mit in das jar-File packe und gucke was dann passiert. Erwartet hatte ich eigentlich das es so direkt funktioniert.
Wenn etwas zu einfach klingt um wahr zu sein, dann ist es oft auch nicht wahr!

Benutzeravatar
wegus
Beiträge: 458
Registriert: 26.09.2006, 09:07

Re: JavaFX Fat Jar

Beitrag von wegus » 27.08.2014, 19:53

http://docs.oracle.com/javafx/2/deploym ... kaging.htm

Da steht vermutlich wies geht. Muss ich mal in Ruhe testen...
Wenn etwas zu einfach klingt um wahr zu sein, dann ist es oft auch nicht wahr!

Benutzeravatar
wegus
Beiträge: 458
Registriert: 26.09.2006, 09:07

Re: JavaFX Fat Jar

Beitrag von wegus » 08.09.2014, 07:25

in answer to myself:


Es geht ganz einfach und das ohne Erstellung eigener Ant-targets. Leider ist es ein wenig versteckt. Bei mir tut es die folgende Vorgehensweise:

(1) Ein FX Application Project erstellen
(2) In die Properties des Projects gehen
(3) im Bereich BUILD auf den Unterpunkt DEPLOYMENT wechseln
(4) rechts ist eine checkbox für native Deployment diese anhaken und die properties speichern.
(5) Bei Rechtsclick auf das Projekt gibt es nun einen neuen Menüpunkt package as, hier wählt man image only aus ... et voila! Problem solved.
Wenn etwas zu einfach klingt um wahr zu sein, dann ist es oft auch nicht wahr!

Antworten