Java FX Problem mit Ubuntu 18 und JavaFx

Bitte aktiviere JavaScript!
@mrBrown Und warum ist das doppelt verpackte jetzt überhaupt notwendig? Ich starte über das Mojohouse Plugin https://github.com/mojohaus/exec-maven-plugin - und da geht es von Maven aus
Welches doppelt-verpackte meinst du?
Bei mir kommt am Ende eine fat-jar ohne externe Abhängigkeiten raus.


@mrBrown hast du das schon mal mit dem Backport vom jpackager versucht? Ich habe das bisher noch nicht zum laufen gebracht - aber es auch nicht allzu intensiv weiter probiert...
#edit Das ist natürlich nur mit den alten JDKs (<13) relevant...
Bisher noch nicht, aktuell muss man das mit Java 11 auch noch per Hand installieren, oder geht das mittlerweile rein über Maven?
 
A

Anzeige


Vielleicht hilft dir dieser Kurs hier weiter: (hier klicken)
Bei mir läuft es mit Maven und IntelliJ:

Java ist OpenJDK 11 ohne JavaFX, JavaFX ist auch nicht zusätzlich installiert.
pom.xml entspricht deiner, bis auf das Anpassen der main-Klasse.

Zusätzlich zu der bestehenden main ist eine neue main-Klasse hinzugefügt, die nichts anderes macht, als die bestehende main aufzurufen. Das ganze vehindert, das man direkt direkt das Modul-System nutzen möchte (macht es dabei mMn einfacher).


Zusätzliche Main:
Java:
package GUI;
public class StartableMain {
    public static void main(String[] args) {
        GUI.Main.main(args);
    }
}

Build-Section in der pom.xml
XML:
<build>
    <plugins>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <release>11</release>
            </configuration>
        </plugin>

        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <finalName>FireNaviClient</finalName>
                <appendAssemblyId>false</appendAssemblyId>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <archive>
                    <manifest>
                        <mainClass>GUI.StartableMain</mainClass>
                    </manifest>
                </archive>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>attached</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
Es hat geklappt!
Viele Dank! Auch an die anderen Mitglieder!

Als kurze Zusammenfassung:
Ich habe OpenJDK installiert über sudo apt-get install openjdk-8-*.
Dann habe ich die Abhängigkeiten von JavaFX in meiner POM hinzugefügt.
Die POM mit der Antwort von @mrBrown ergänzt, aus dem Beispiel auch die zusätzliche Main erstellt und dann hats geklappt.


Jetzt hab ich da doch noch eine Frage, weil ich das nicht so ganz verstanden hab:
Die StartableMain ist jetzt zwingend notwendig oder gibt es auch die Möglichkeit alles über eine Main laufen zu lassen? Könnte ja den Einzeiler auch einfach in meine vorherige Main einfügen oder?
 
Welches doppelt-verpackte meinst du?
Es gab noch einen zweiten Edit - hatte deine Erklärung übersehen...

Zum JDK. Nein, gibt es nicht als Maven-Packet - das wäre wohl overkill.

Aber es gibt das Tool jpackage (JEP 343: Packagin Tool) und mit dem VocabHunter gibt es ein Tool, dass hier recht früh mal versucht hat zu zeigen, wie man ein Custom JDK mit JavaFX anhand eines Gradle-Builds machen kann - ist aber recht kompliziert.
Etwas später hat Gluon, die sich ja stark um JavaFX (und openjfx.io) bemühen, auch noch ein paar Gradle- und Maven-Plugins vorgestellt.
https://gluonhq.com/plugins-to-ease-the-work-with-javafx-11/
-> https://github.com/openjfx/javafx-maven-plugin/
-> https://github.com/openjfx/javafx-gradle-plugin

https://github.com/javafxports/openjdk-jfx/issues/238

https://github.com/brunoborges/javafx-jlink-starter-gradle
https://github.com/brunoborges/maven-javafx-archetype

https://github.com/beryx/badass-jlink-plugin (Gradle)
https://github.com/agilhard-oss/jlink-jpackager-maven-plugin

Das ist so alles, was mir zu dem Thema soweit bekannt ist... Wie gesagt: Habe mich damit bisher noch nicht so viel beschäftigen wollen... :eek::D
 
Jetzt hab ich da doch noch eine Frage, weil ich das nicht so ganz verstanden hab:
Die StartableMain ist jetzt zwingend notwendig oder gibt es auch die Möglichkeit alles über eine Main laufen zu lassen? Könnte ja den Einzeiler auch einfach in meine vorherige Main einfügen oder?
Mit Java 11 ist das nötig, wenn man nicht das Modulsystem nutzen will, dazu darf die zuerst ausgeführte Main-Methode nicht in einer Klasse sein, die Application extendet
 
Mit Java 11 ist das nötig, wenn man nicht das Modulsystem nutzen will, dazu darf die zuerst ausgeführte Main-Methode nicht in einer Klasse sein, die Application extendet
Achso okay. Dann lass ich den Aufbau jetzt einfach so. Das passt :)

Ich bekomme allerdings eine neue Fehlermeldung bzw. Warning.
(java:6173): Gdk-WARNING **: 14:51:36.298: XSetErrorHandler() called with a GDK error trap pushed. Don't do that.
Sollte ich mir deswegen Sorgen machen?

Es läuft trotzdem alles, ich bin nur etwas verwirrt.
 
Sorgen brauchst du dir nicht machen, afaik gibts dazu schon ein offenes Ticket und das wird sicher in einer späteren Version auch beseitigt
 
Mit Java 11 ist das nötig, wenn man nicht das Modulsystem nutzen will, dazu darf die zuerst ausgeführte Main-Methode nicht in einer Klasse sein, die Application extendet
Bin ich ja beruhigt. In richtigen Applikationen mache ich das nämlich eh nie... ;)

Meine nur den jpackager ;)

Das letzte mal, als ich mir das angeguckt hab, musste der für Java 11 im System installiert werden (wenn ich das richtig im Kopf hab...)
Ja, das ist bis Java 12 immer noch so. In Java 13 soll er wohl angeblich enthalten sein:
This is an early access build of JEP 343: Packaging Tool, aimed at testing a prototype implementation of jpackage, which is a new tool for packaging self-contained Java applications along with a Java Runtime Environment.

This build is intended for developers interested in jpackage, and is provided as a convenience so that they don't need to build from the source code (branch="JDK-8200758-branch").

Warning: This build is based on an incomplete version of JDK 13.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben