Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält?

Thomasneuling

Mitglied
Ich nutze Intelij ultimate.

Ich habe ein Javaprojekt, wo ich ein bestimmtes Package, welches das GUI Fenster für eine Application darstellt, in eineJar machen will, da will ich alle Java Dateien, alle JavaFx-Klassen, alle Java-Controllerklassem alle FXML Dateien, alle Bilder, Alle Sounds und alle CSS Dateien nehmen, damit man die vollständige GUI als Jar hat.

Da wollte ich nun fragen, wie das geht? Die FXMl, Css, FXML und Sounds (Also Mp3-Dateien), befinden sich im Ressourcen Ordner und die Javafx, sowie die normalen Javaklassen, befinden sich in einem Package unter Java?

Ist das einfach oder hat man da was zu beachten?
 
Beste Antwort
Danke, ich muss eine Jar erstellen, da das die Abgabe verfplichtet.
Ok, wenn das die Anforderung ist, dann muss das wohl sein. Aber ich finde das gerade sehr irritierend. Was ist denn da das Ziel? Da muss es dann doch irgendwelche Vorgaben geben, was genau wie zu machen ist. Ist für mich nicht gerade nachvollziehbar, aber ok:

Die Plugins werden mit entsprechender Konfiguration in der pom eingetragen. Das sieht dann z.B. so aus:

Für die Eintragung der Main-Class:
XML:
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <archive>...

KonradN

Super-Moderator
Mitarbeiter
Wenn Du Maven nutzt, dann kannst Du Abhängigkeiten mit in die JAR Datei packen so Du wirklich über ein JAR gehen willst. (Das ist aber alles pre Java 9 und bringt diverse Probleme mit sich. Damit die JAR Datei läuft ist halt eine passende Java Installation notwendig.

Ein Ansatz dazu wäre das maven shade Plugin. Damit JavaFX funktioniert wirst Du vermutlich auch noch eine separate Klasse mit main Methode haben. Die main Methode in der Klasse, die von Application erbt wird leider nicht funktioniern.

Mein Tipp hier wäre aber tatsächlich der Bau eines Images, welches dann auch eine Java Runtime enthält. Dann hast du bei deiner Anwendung alles dabei, was du brauchst.
 

Thomasneuling

Mitglied
Danke dir Konrad, bin leider ein totaler Anfänger in diesem Bereich. Was genau heißt Bau eines Images ? Und es gibt keine Möglichkeit eine Jar zu erstellen für Java19 ? Muss das für eine Abgabe machen.
 
Zuletzt bearbeitet:

Thomasneuling

Mitglied
Ich habe jetzt bei Intelij ein Jar erstellt, über Artifakte, bei prijectstructure und build gedrückt, beim Ausführen über cmd kommt der Fehler: Zum ausführen dieser Anwendung JavaFx Runtime Komponenten fehlen, was kann ich da tun? Habe ja Javafx mit Maven.

Aber auf Intelij kann ich das Projekt problemlos startenö
 
Zuletzt bearbeitet:

KonradN

Super-Moderator
Mitarbeiter
Wenn Du Maven nutzt, dann solltest Du nicht diese Artifakte von IntelliJ nutzen. IntelliJ bietet halt einige eigene Möglichkeiten zur Projektverwaltung, aber Du willst ja Maven zur Verwaltung des Projektes nutzen. Daher rate ich Dir davon ab - auch wenn ich jetzt da mögliche Lösungen anbiete.

beim Ausführen über cmd kommt der Fehler: Zum ausführen dieser Anwendung JavaFx Runtime Komponenten fehlen, was kann ich da tun?
Da gibt es zwei mögliche Fehlerquellen:
a) Die Abhängigkeiten sind nicht mit in das JAR eingeflossen. Das müsste man ggf. prüfen.
b) Wenn die JavaFX Libraries einfach auf dem Classpath sind, dann gibt es Probleme bei der Initialisierung, wenn die Startklasse direkt eine JavaFX Klasse nutzt. Dies ist oft der Fall, denn die main Methode ist meist in einer Klasse, die von Application erbt und die dann in der main Methode einfach launch aufruft. Ein einfacher Workaround ist eine weitere Klasse nur mit einer main Methode, die dann diese andere main Methode aufruft. Ein Beispiel findet sich z.B. unter https://github.com/kneitzel/JavaFXMavenApp/blob/main/src/main/java/de/kneitzel/Main.java

Wenn Du es rein über Maven machen willst (empfohlen), dann gibt es da mehrere Möglichkeiten:
- Nicht gut: Du baust ein jar File, das ausführbar ist und alle Abhängigkeiten enthält. Dazu kann man dann z.B. ein Manifest hinterlegen und mittels shade Plugin die Abhängigkeiten einbinden. Das wäre dann das, was Du mit dem Artifakt in IntelliJ gemacht hast.

- Besser: Du baust wirklich ein App-Image. Dazu musst Du Java 14 oder höher haben und das Ergebnis ist dann nicht einfach ein jar sondern eine Verzeichnisstruktur mit einem Binary und die Verzeichnisse enthalten wirklich alles, was Du brauchst. Wenn Du es weiter gibst, dann muss man da nichts groß installieren. Da wird dann kein Java benötigt oder so!
Vorgehen: Entweder das Projekt, das Du schon jetzt hast, anpassen oder einfach das JavaFXMavenApp Projekt herunter laden, die POM anpassen und das src Verzeichnis komplett austauschen. Das letztere hat den Vorteil, dass Du gleich mehrere Dinge bekommst wie statische Codeanalyse und co. So Du nur ein minimales, kleines pom hast ohne große Anpassungen, dann ist Letzteres am Einfachsten.

Dabei kann ich Dir auch gerne generell helfen. Wenn es da Probleme gibt, kannst Du z.B. deine POM posten und dann bekommst Du eine Anpassung von mir mit den Dingen, die notwendig sind.
 

Thomasneuling

Mitglied
Wenn Du Maven nutzt, dann solltest Du nicht diese Artifakte von IntelliJ nutzen. IntelliJ bietet halt einige eigene Möglichkeiten zur Projektverwaltung, aber Du willst ja Maven zur Verwaltung des Projektes nutzen. Daher rate ich Dir davon ab - auch wenn ich jetzt da mögliche Lösungen anbiete.


Da gibt es zwei mögliche Fehlerquellen:
a) Die Abhängigkeiten sind nicht mit in das JAR eingeflossen. Das müsste man ggf. prüfen.
b) Wenn die JavaFX Libraries einfach auf dem Classpath sind, dann gibt es Probleme bei der Initialisierung, wenn die Startklasse direkt eine JavaFX Klasse nutzt. Dies ist oft der Fall, denn die main Methode ist meist in einer Klasse, die von Application erbt und die dann in der main Methode einfach launch aufruft. Ein einfacher Workaround ist eine weitere Klasse nur mit einer main Methode, die dann diese andere main Methode aufruft. Ein Beispiel findet sich z.B. unter https://github.com/kneitzel/JavaFXMavenApp/blob/main/src/main/java/de/kneitzel/Main.java

Wenn Du es rein über Maven machen willst (empfohlen), dann gibt es da mehrere Möglichkeiten:
- Nicht gut: Du baust ein jar File, das ausführbar ist und alle Abhängigkeiten enthält. Dazu kann man dann z.B. ein Manifest hinterlegen und mittels shade Plugin die Abhängigkeiten einbinden. Das wäre dann das, was Du mit dem Artifakt in IntelliJ gemacht hast.

- Besser: Du baust wirklich ein App-Image. Dazu musst Du Java 14 oder höher haben und das Ergebnis ist dann nicht einfach ein jar sondern eine Verzeichnisstruktur mit einem Binary und die Verzeichnisse enthalten wirklich alles, was Du brauchst. Wenn Du es weiter gibst, dann muss man da nichts groß installieren. Da wird dann kein Java benötigt oder so!
Vorgehen: Entweder das Projekt, das Du schon jetzt hast, anpassen oder einfach das JavaFXMavenApp Projekt herunter laden, die POM anpassen und das src Verzeichnis komplett austauschen. Das letztere hat den Vorteil, dass Du gleich mehrere Dinge bekommst wie statische Codeanalyse und co. So Du nur ein minimales, kleines pom hast ohne große Anpassungen, dann ist Letzteres am Einfachsten.

Dabei kann ich Dir auch gerne generell helfen. Wenn es da Probleme gibt, kannst Du z.B. deine POM posten und dann bekommst Du eine Anpassung von mir mit den Dingen, die notwendig sind.
Danke, ich muss eine Jar erstellen, da das die Abgabe verfplichtet.

Leider darf ich die Pom nicht hochladen :(, wie funktioniert dieses plugin? Also ich muss ein shade plugin holen, dann in die dependency wahrscheinlich tun und dann im lifecyle was anklicken, aber habe da leider keine Ahnung. Hab jetzt auf Stack Sachen gesucht, aber irgendwie mehrere Varianten gefunden.
 

KonradN

Super-Moderator
Mitarbeiter
Danke, ich muss eine Jar erstellen, da das die Abgabe verfplichtet.
Ok, wenn das die Anforderung ist, dann muss das wohl sein. Aber ich finde das gerade sehr irritierend. Was ist denn da das Ziel? Da muss es dann doch irgendwelche Vorgaben geben, was genau wie zu machen ist. Ist für mich nicht gerade nachvollziehbar, aber ok:

Die Plugins werden mit entsprechender Konfiguration in der pom eingetragen. Das sieht dann z.B. so aus:

Für die Eintragung der Main-Class:
XML:
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>your.package.MainClass</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

Um alle Abhängigkeiten einzubauen könnte man das shade plugin verwenden:
XML:
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.4.1</version>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>shade</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

Das ist jetzt ein Beispiel - das Shade Plugin kann aber noch stark konfiguriert werden. Das ist mit etwas Glück aber nicht notwendig.

Wichtige Dinge sind aber ggf:
  • Filtern von Dateien (Wenn eine Abhängigkeit signiert ist, dann muss z.B. die Signatur entfernt werden)
  • Wenn Du diverse Services mit einbindest, dann ist in der Regel ein ServicesResourceTransformer notwendig
  • ...

Die Dokumentation zeigt viele Dinge auf, die möglich sind. https://maven.apache.org/plugins/maven-shade-plugin/index.html
 
Beste Antwort

Thomasneuling

Mitglied
Ok, wenn das die Anforderung ist, dann muss das wohl sein. Aber ich finde das gerade sehr irritierend. Was ist denn da das Ziel? Da muss es dann doch irgendwelche Vorgaben geben, was genau wie zu machen ist. Ist für mich nicht gerade nachvollziehbar, aber ok:

Die Plugins werden mit entsprechender Konfiguration in der pom eingetragen. Das sieht dann z.B. so aus:

Für die Eintragung der Main-Class:
XML:
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>your.package.MainClass</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

Um alle Abhängigkeiten einzubauen könnte man das shade plugin verwenden:
XML:
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.4.1</version>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>shade</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

Das ist jetzt ein Beispiel - das Shade Plugin kann aber noch stark konfiguriert werden. Das ist mit etwas Glück aber nicht notwendig.

Wichtige Dinge sind aber ggf:
  • Filtern von Dateien (Wenn eine Abhängigkeit signiert ist, dann muss z.B. die Signatur entfernt werden)
  • Wenn Du diverse Services mit einbindest, dann ist in der Regel ein ServicesResourceTransformer notwendig
  • ...

Die Dokumentation zeigt viele Dinge auf, die möglich sind. https://maven.apache.org/plugins/maven-shade-plugin/index.html
Bei der Variante muss ich jedoch einen Pfad noch zur JavaFx SDK geben, weil er sonst sagt, dass die javafx run kompinente fehlt, also habe javafx sdk runtergeladen und bevor ich über die konsole direkt java -jar xxx.jar eingebe, muss ich dann noch den Pfad zum lib Ordner geben und die Module in der Konsole mit einspielen, gibt es eine Möglichkeit, dass ich das nicht machen muss?
 

KonradN

Super-Moderator
Mitarbeiter
a) Hast Du die Maven Abhängigkeiten alle in Maven eingetragen?
b) Hast Du diese zusätzliche Klasse mit der main Methode gemacht?

Wenn Du beides gemacht hast, dann sollte es funktionieren.
 

berserkerdq2

Bekanntes Mitglied
Ich habe heute den Ansatz den Konrad bereitgestellt hat, ebenfalls getestet, bei mri ist es nun so, windows nutzer können die jar per doppelklick ausführen, mac und linux nutzer nur, wenn sie diese über dei konsole laufen lassen, gibts dafür ein fix?
Also Windowsnutzer machen einfach Doppelklick und es geht, bei Linux und Mac Usern, muss man im Terminal die Jar Datei mit java - jar JarName.jar ausführen, kann man auch irgendwie mit maven einstellen, dass das per Doppelklick auch für die geht?
 

KonradN

Super-Moderator
Mitarbeiter
Man sollte halt generell keine jar Datei bereitstellen sondern Binaries, die gestartet werden können.

Dazu dient JPackage.

Ansonsten habe ich keine Ahnung, wie das mit der jar Datei in Linux und macOS zu konfigurieren ist. Die jar Datei ist ja anscheinend ok, wenn der Aufruf auf der Kommandozeile funktioniert.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Datei (CSV-ähnlich) in Java einlesen & mit teil der Daten Graphen erstellen Allgemeine Java-Themen 9
J Java Programm - ausführbare Jar Datei erstellen Allgemeine Java-Themen 2
C cgi-datei in java erstellen Allgemeine Java-Themen 8
I java-datei erstellen unter mac Allgemeine Java-Themen 7
M Java Überprüfen ob .exe-Datei bereits ausgeführt wird Allgemeine Java-Themen 2
E java mithilfe url .jar datei öffnen Allgemeine Java-Themen 9
E Java .exe Datei mit args starten Allgemeine Java-Themen 2
Master3000 Java Datei mehrmals einlesen Allgemeine Java-Themen 4
E Input/Output Eigene Datei mit java öffnen Allgemeine Java-Themen 9
P Bat Datei in Java ausführen Allgemeine Java-Themen 2
Gaudimagspam CSV-Datei auslesen in Java Allgemeine Java-Themen 7
P Input/Output entfernte Datei mit Java öffnen ohne Download Allgemeine Java-Themen 5
O Java-Applikation tut in Netbeans, als JAR nicht, wegen Pfadangaben einer benötigten Datei Allgemeine Java-Themen 8
Trèfle Excel-Datei nicht speicherbar, da von Java zum Bearbeiten gesperrt. Allgemeine Java-Themen 3
L Excel Datei löscht sich selbst im Programm - Java Allgemeine Java-Themen 3
G Workupload datei mit Java Downloaden Allgemeine Java-Themen 6
M Java Eclipse- Datei exportieren Allgemeine Java-Themen 5
H jar-Datei mit java.exe anstatt mit javaw.exe ausführen Allgemeine Java-Themen 9
Javafan01 .sh datei in Java ausführen Allgemeine Java-Themen 1
G Java Datei öffnen Allgemeine Java-Themen 9
M XML-Datei "erweitern" mit Java Allgemeine Java-Themen 2
J Java 8 Datei einlesen Allgemeine Java-Themen 1
D Java Datei nach Eclipse Export funktioniert nicht Allgemeine Java-Themen 0
E Drucken einer Pdf Datei unter Java. Allgemeine Java-Themen 1
J Java - Zeile aus Text datei löschen Allgemeine Java-Themen 13
J Java - "Umschaltung" in Log Datei Allgemeine Java-Themen 1
J Best Practice Java 8 Datei einlesen und verarbeiten Allgemeine Java-Themen 2
J Java JSON-Datei aus .Zip auslesen und Download mit Progress Bar Allgemeine Java-Themen 20
P Starten einer Java .jar-Datei Allgemeine Java-Themen 0
A Ausführbare Java-Datei aus Projekt und Datenbank Allgemeine Java-Themen 3
M Text datei in java jar datei einbinden Allgemeine Java-Themen 4
D JAVA - Properties Datei mit Userdaten Allgemeine Java-Themen 7
B Download und Öffnen einer Datei mit Java Allgemeine Java-Themen 6
V C-Header Datei aus .java File herstellen Allgemeine Java-Themen 10
C Umgebungsvariable Java-Datei in anderem Verzeichnis ausführen Allgemeine Java-Themen 2
J Java Datei durch Java Datei öffnen Allgemeine Java-Themen 16
H Eine .java-Datei aus der Windowskommandozeile komplilieren - wie? Allgemeine Java-Themen 7
H java.library.path mit einer Batch-Datei einstellen Allgemeine Java-Themen 3
S jar Datei mit Java Programm öffnen Allgemeine Java-Themen 3
R Jar-Datei per Java speichern Allgemeine Java-Themen 15
K JAVA Datei einlesen Allgemeine Java-Themen 2
G Java EE, Datei öffnen, HeadlessException Allgemeine Java-Themen 3
M keine Bilder in .jar-Datei (java) Allgemeine Java-Themen 23
M Einlesen einer Datei in Java Allgemeine Java-Themen 3
J Java Datei aus FTP in ein INputstream Allgemeine Java-Themen 2
J Java Datei ausführen Allgemeine Java-Themen 8
J Exe Datei in Java erkennen??? Allgemeine Java-Themen 4
M Java Datei Compilieren Allgemeine Java-Themen 9
T .jar-Datei aus Java heraus aktualisieren Allgemeine Java-Themen 8
B Applet .java Datei einlesen, anzeigen Allgemeine Java-Themen 3
destroflyer Datei mit Java öffnen Allgemeine Java-Themen 3
B Excel Datei in einem Java Programm mit GUI darstellen Allgemeine Java-Themen 9
B Java soll Datei von Javascript empfangen Allgemeine Java-Themen 4
J Java-Datei unter Mac OS X öffnen - eine Frage der Klasse Allgemeine Java-Themen 2
K Datei umbenennen mit Java Allgemeine Java-Themen 6
J xls Datei drucken mit Java Allgemeine Java-Themen 10
M JAVA in BATCH Datei Allgemeine Java-Themen 9
Developer_X Java Applet - Font aus datei laden Allgemeine Java-Themen 15
martin82 Java-Code aus Text-Datei parsen Allgemeine Java-Themen 3
C Java-Datei compilieren Allgemeine Java-Themen 6
M java.awt. Desktop browse lokale datei aus jar Allgemeine Java-Themen 4
L Externes Bash Script aus Java Datei heraus starten Allgemeine Java-Themen 2
Schandro Datei öffnen mit... Bestimmten Dateityp mit einen Java-Programm öffnen lassen Allgemeine Java-Themen 5
Developer_X Mit einer Batch Datei eine Java Datei starten Allgemeine Java-Themen 4
T .jar Datei aus Java Code starten Allgemeine Java-Themen 10
G Java- Programm mit bat- Datei starten Allgemeine Java-Themen 16
E Eine .wsp datei in java öffnen auslesen und verändern Allgemeine Java-Themen 4
G Java POI HSSF Excel Datei Gruppierung und Gliederung Allgemeine Java-Themen 2
M Java Programm durch Datei Öffnen Allgemeine Java-Themen 6
ARadauer Excel Datei in Excel aus Java heraus öffnen Allgemeine Java-Themen 10
E *.exe- Datei aus einem Java- Programm Allgemeine Java-Themen 3
H aus .class datei eine .java erzeugen Allgemeine Java-Themen 4
L Frage zu java.util.regex und Einlesen einer Datei Allgemeine Java-Themen 2
N Datei mit Java-Application öffenen Allgemeine Java-Themen 5
meez java.security Datei "überschreiben" Allgemeine Java-Themen 4
T iso datei (Image) mit Java einlesen und Inhalt entpacken Allgemeine Java-Themen 3
S ausführbare Datei aus Java-Programm starten Allgemeine Java-Themen 2
P Drucken einer Excel Datei in Java Allgemeine Java-Themen 8
W Jar datei updaten mit java Allgemeine Java-Themen 4
C mehrere Java Klassen in einer Datei Allgemeine Java-Themen 4
P Excel-Datei mit Java bearbeiten Allgemeine Java-Themen 2
R Java Quellcode zu exe Datei unsw. Allgemeine Java-Themen 5
C RAM Speicher in Datei auslagern (Java Swapping) Allgemeine Java-Themen 4
D Excel-Datei mit Java auslesen Allgemeine Java-Themen 1
OnDemand Java Deployment Vaadin Allgemeine Java-Themen 3
D Hat Java eine Library um JavaScript auszuwerten? Allgemeine Java-Themen 2
Zrebna Wieso sind eigentlich JUnit-Tests in src/test/java platziert - nur Konvention? Allgemeine Java-Themen 7
N LlaMA, KI, java-llama.cpp Allgemeine Java-Themen 39
V Java-Codierungsherausforderung: Navigieren durch die Macken der Datumsmanipulation Allgemeine Java-Themen 2
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
M java: unexpected type Allgemeine Java-Themen 2
harrytut Java Input/Output Tests Junit Allgemeine Java-Themen 3
B Java Discord bot auf ein Root Server? Allgemeine Java-Themen 1
BetziTheRealOne Java PKIX path building failed as non Admin Allgemeine Java-Themen 15
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
KonradN Java 21 Release Allgemeine Java-Themen 5
V Umgang mit fehlenden Daten in einer Java-Datenanalyseanwendung Allgemeine Java-Themen 5
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
K Java Anwendung machen Anleitung Allgemeine Java-Themen 5
G java.io.listFiles() Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben