Runnable Jar-File erzeugen

Carcharoth

Bekanntes Mitglied
Guten Tag

Bisher habe meine runnable Jar-Files in Eclipse über Rechtsklick auf dem Projekt / Export erzeugt.

Ich habe bei einem Projekt einige Dependencies über Maven eingebunden und ich schaffe es nicht ein funktionierendes Jar-File zu erzeugen.
Muss ich jetzt anders vorgehen ? Werden die über Maven eingebundenen Klassen miteingepackt?

Danke für eure Tipps
Gruss
 
K

kneitzel

Gast
Wenn Du mit Maven arbeitest dann kannst Du die Abhängigkeiten einfach über das maven-shade-plugin erzeugen. Da ist ggf. noch nicht mal groß eine Config notwendig - es kann schon reichen, dass es mit eingebunden wird beim package:

Also etwas wie:
XML:
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.4</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
 

Carcharoth

Bekanntes Mitglied
Ich verstehe Maven noch nicht so richtig.
Muss ich diesen Plugin in der pom.xml einbauen? Dort hat es aber schon ein Plugin.
Und sind das so was wie Instruktionen die Maven sagen wie das runnable Jar-File zu bauen ist ?

Ich verstehe aber dann nicht, wann das ausgeführt wird und wo das Jar-File erzeugt wird.

Aktuell sieht meine pom so aus:
XML:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>PLZ_DB2</groupId>
  <artifactId>PLZ_DB2</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <resources>
      <resource>
        <directory>src</directory>
        <excludes>
          <exclude>**/*.java</exclude>
        </excludes>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.0</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>
          <dependency>
            <groupId>net.sf.ucanaccess</groupId>
            <artifactId>ucanaccess</artifactId>
            <version>4.0.4</version>
        </dependency>
         <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
             <artifactId>jersey-client</artifactId>
             <version>2.8</version>
         </dependency>
         <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
             <artifactId>jersey-media-json-jackson</artifactId>
             <version>2.8</version>
         </dependency>
         <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20190722</version>
        </dependency>
     </dependencies>
</project>
 

Carcharoth

Bekanntes Mitglied
Ich bin schon etwas weiter gekommen und habe festgestellt, dass ich im Menü Run verschiedene Möglichkeiten habe einen Maven Build anzustossen. Ich nehme an damit starte ich den Prozess.
Im Moment läuft er noch ziemlich mit Fehlern durch aber ich taste mich heran.
 

Carcharoth

Bekanntes Mitglied
Ich muss nochmals fragen. Ich komme nicht klar mit dem Build bei Maven.

Ich habe mir zu Testzwecken eine Miniklasse UF gebaut.
Java:
import javax.swing.JFrame;
import javax.swing.JLabel;

public class UF extends JFrame {

        public static void main(String[] args) {
            UF frame = new UF();
        }

        public UF() {
            setBounds(100, 100, 450, 300);
            add(new JLabel("hi there"));
            setVisible(true);
        }

}

Diese liegt im Projekt TestMVN unter src:
1615816730409.png


Meine pom sieht wie folgt aus:
XML:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>TestMVN</groupId>
  <artifactId>TestMVN</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.0</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

Wenn ich in Eclipse mache Run --> Run as --> Maven install, läuft alles fehlerfrei durch.
Die Jar welche sich in Target befindet, kann ich aber nicht ausführen (es passiert einfach nichts).

Eine Idee was ich falsch mache ?

Danke
 

Thallius

Top Contributor
Ich glaube kaum das "nichts" passiert. Starte die jar doch mal von der cmd shell aus statt sie nur doppelt zu klicken. Dann wirst du bestimmt eine Fehlermeldung bekommen.
 

Carcharoth

Bekanntes Mitglied
Guter Hinweis.
In der Tat: kein Hauptmanifestattribut in TestMVN-0.0.1-SNAPSHOT.jar.

Heisst das Maven weiss nicht bei welcher Main-Methode er starten soll ?
Wie sage ich ihm das in der pom ?
 

Thallius

Top Contributor
In der configuration

[CODE lang="java" title=" GEConstancyCheck "] <configuration>
<archive>
<manifest>
<mainClass>NameDerMainClass</mainClass>
</manifest>
</archive>
</configuration>
[/CODE]
 

Carcharoth

Bekanntes Mitglied
Danke. Ich kriege immer noch den Fehler.
Ich glaube es liegt noch an was anderes, denn wenn ich den Build in der Cmd Zeile ausführe, dann sagt er "No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?". Wenn ich in Eclipse schaue, ist aber wohl JDK 1.8 ausgewählt.
 
K

kneitzel

Gast
Auf der Kommandozeile nutzt er doch die Eclipse Einstellungen nicht. Also bitte prüfen: Hast Du das JAVA_HOME gesetzt? Hast Du das entsprechende java / javac im Pfad?

Also so eine typische einfache POM sieht bei mir so aus:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>de.telekom.ironman</groupId>
    <artifactId>MavenTest</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <java.version>8</java.version>
        <maven.compiler.version>3.8.1</maven.compiler.version>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        ...
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.compiler.version}</version>
                <configuration>
                    <!-- release flag erst ab Java 9 verfügbar!
                    <release>${java.version}</release>
                    -->
                </configuration>
            </plugin>

            <!-- Jar bekommt Manifest! -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>my.package.TestApp</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Darauf achten - ich setze da jetzt einige Parameter und im compiler ist ein release Flag, das erst ab Java 9 existiert!

Und wenn du ein jar mit allen Abhängigkeiten haben möchtest, dann fügst Du eifnach das Shade Plugin hinzu - das sollte schon ausreichen und kommt einfach zu den beiden schon referenzierten Plugins.

Edit: Dependencies noch gelöscht und durch ... ersetzt ...
 

Thallius

Top Contributor
Es hilft ungemein sich erstmal mit maven in der Shell auseinander zu setzen bevor man das alles über eine IDE macht. Tipp einfach mal einen mvn clean build ein und schau was der dir alles um die Ohren haut
 

Carcharoth

Bekanntes Mitglied
Es hilft ungemein sich erstmal mit maven in der Shell auseinander zu setzen bevor man das alles über eine IDE macht
Ja das stimmt, habe ich mittlerweile auch festgestellt. Bringe es erstmal zum laufen in der Shell und gehe nachher in die IDE.

@kneizel: danke, ja so langsam habe ich einiges durcheinander gebracht. Habe JAVA_HOME richtig gestellt und jetzt findet die Shell den Compiler.

Ich habe noch folgende Schwierigkeit:
XML:
  <manifest>
      <mainClass>my.package.TestApp</mainClass>
  </manifest>

Wie bezeichne ich hier meine MainClass die in keinem Package liegt ? Wenn ich schreibe <mainClass>UF</mainClass>, sagt er Could not find main Class UF.

1615840453955.png
 
K

kneitzel

Gast
Also wenn Du jetzt das Bild vergleichst mit dem in #5, bei dem Du noch ein Eclipse Projekt hattest: Es wird bei UF kein Default package angezeigt.

Das liegt einfach daran, dass Maven die Source Dateien in src/main/java erwartet. Und da liegt die Datei nicht. Wenn Du im jar File schaust (Einfach in .zip umbenennen und dann mit einem Tool Deiner Wahl rein schauen), dann wird da vermutlich auch kein UF.class zu finden sein sondern wohl nur META.INF mit Manifest und sonst nichts ...

Also in src ein Verzeichnis main anlegen und da drin dann ein Verzeichnis java. Dann das UF.java da rein verschieben und dann wird Eclipse vermutlich da auch wieder ein Default package anzeigen ...
 

Carcharoth

Bekanntes Mitglied
Danke. Habe es lösen können. Jetzt läufts !

Frage zum vollständigen Verständnis: du schreibst Maven erwartet die Source Dateien in src/main/java. Hat das jetzt damit zu tun, dass dies so in der effektiven POM per Default definiert ist ? somit könnte man das theoretisch überschreiben in der pom ? (ist eine rein theoretische Frage, nicht dass es mich locken würde).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
topi relativer Pfad in einem Runnable JAR file Java Basics - Anfänger-Themen 12
krgewb Runnable JAR File Export Java Basics - Anfänger-Themen 11
F Bild in ein Runnable Jar File packen (eclipse) Java Basics - Anfänger-Themen 2
U Externe Library im non runnable jar File im eclipse Java Basics - Anfänger-Themen 1
T Java Projekt als runnable jar file exportieren inklusive csv Dateien Java Basics - Anfänger-Themen 4
M Jpg und wav datei pfadangabe bei Runnable Jar file Java Basics - Anfänger-Themen 2
berserkerdq2 Größter unterschied von extends thread und implements runnable? Java Basics - Anfänger-Themen 2
javajoshi Problem mit zwei Threads und Arrays (Runnable) Java Basics - Anfänger-Themen 12
5 Welchen Sinn hat ein Runnable Java Basics - Anfänger-Themen 6
G Moving Objects with Threads (implements Runnable) Java Basics - Anfänger-Themen 1
R Compiler-Fehler Runnable-Jar != Eclipse Java Basics - Anfänger-Themen 5
K Runnable oder Keyadapter läuft falsch Java Basics - Anfänger-Themen 4
Helgon Unterschied runnable und normale jar Java Basics - Anfänger-Themen 6
Helgon Interface Runnable Frage / Schnittstellen allgemein Java Basics - Anfänger-Themen 3
6 JDK installieren Runnable Jar Files ausführen?! Java Basics - Anfänger-Themen 8
O Erste Schritte Runnable Jar <- Ordner Fehlen Java Basics - Anfänger-Themen 6
Y Threads extends Thread oder implements Runnable Java Basics - Anfänger-Themen 10
V Kein neuer Thread trotz Runnable Java Basics - Anfänger-Themen 4
F Icon der runnable jar ändern Java Basics - Anfänger-Themen 3
W KeyListener auf Applet mit Runnable Java Basics - Anfänger-Themen 4
S Bild-Resource in Runnable Jar Java Basics - Anfänger-Themen 15
T Thread oder Runnable? Java Basics - Anfänger-Themen 3
J new Runnable Java Basics - Anfänger-Themen 4
M FileWriter innerhalb runnable Jar Java Basics - Anfänger-Themen 8
? Oracle jpr runnable target Java Basics - Anfänger-Themen 2
R Threads / Interface Runnable Java Basics - Anfänger-Themen 7
A Frage zu Datenzugriff bei new Thread(new Runnable) Java Basics - Anfänger-Themen 8
U Projekt als Runnable Jar exportieren Java Basics - Anfänger-Themen 4
P probleme mir Runnable Jar Java Basics - Anfänger-Themen 5
E Zugriff aus einer Runnable auf die Oberklasse Java Basics - Anfänger-Themen 2
chik Problem mit der Runnable Methode Java Basics - Anfänger-Themen 3
StickToFreak Runnable + KeyListener? Java Basics - Anfänger-Themen 32
S Runnable jar "Could not find main class" Java Basics - Anfänger-Themen 8
F Alternativen zu runnable JAR? Java Basics - Anfänger-Themen 13
F Classpath: Wichtig für Runnable JAR? Java Basics - Anfänger-Themen 2
F Projektstruktur und runnable JAR! Java Basics - Anfänger-Themen 6
F Runnable JAR Programm kann nur über Konsole gestartet werden Java Basics - Anfänger-Themen 9
S runnable jar datei sql fehler Java Basics - Anfänger-Themen 5
G Innerhalb von Runnable auf super. zugreifen? Java Basics - Anfänger-Themen 3
S Was ist "Runnable"? Java Basics - Anfänger-Themen 25
Daniel_L Unterschied Thread und Runnable? Java Basics - Anfänger-Themen 8
W Aus einem Runnable-thread auf einen JFrame zugreifen Java Basics - Anfänger-Themen 5
frau-u Interface Runnable - wie funktionierts? Java Basics - Anfänger-Themen 3
S sleep ohne runnable? Java Basics - Anfänger-Themen 8
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
R File.pathSeparator und File.separator Java Basics - Anfänger-Themen 46
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
izoards Prunsrv - Windows Service - .bat file starten Java Basics - Anfänger-Themen 84
I File Uploader... Statusanzeige, Berechnung des Status etc. Java Basics - Anfänger-Themen 0
I H2 Datenbank starten / Daten in File speichern Java Basics - Anfänger-Themen 25
G jar file lässt sich nicht öffnen Java Basics - Anfänger-Themen 1
N Textdatei aus Resourcen-Ordner eines Projekts/ jar-file lesen Java Basics - Anfänger-Themen 4
J File length als Prüfwert für Download Java Basics - Anfänger-Themen 5
berserkerdq2 Überprüfen ob eine Schreibberechtigung auf ein file exisitert bzw. ob man dieses file löschen kann, wie? Java Basics - Anfänger-Themen 9
berserkerdq2 IOstreams, was unterscheidet file von z. B. BufferedWriter? Java Basics - Anfänger-Themen 11
J Datentypen String in File konvertieren funktioniert nicht Java Basics - Anfänger-Themen 4
A java jar-File Java Basics - Anfänger-Themen 1
E Executable jar file fehler Java Basics - Anfänger-Themen 9
I Upload File zu einem Webservice Java Basics - Anfänger-Themen 17
I ZIP File erstellen Java Basics - Anfänger-Themen 10
LeoDerKek Textdatei in JAR-File Java Basics - Anfänger-Themen 4
Tom/S File Java Basics - Anfänger-Themen 10
AleXusher Mehrdimensionales Array aus txt.file auslesen Java Basics - Anfänger-Themen 4
A Checkstyle - File contains tab characters Java Basics - Anfänger-Themen 2
H Java file nicht gefunden Java Basics - Anfänger-Themen 5
C File speichern Java Basics - Anfänger-Themen 5
C Pfad zu Properties-File bei ResourceBundle Java Basics - Anfänger-Themen 7
F GSON file mit einer List erstellen Java Basics - Anfänger-Themen 2
rafi072001 Lesen aus einem Excel File Java Basics - Anfänger-Themen 10
C Bild in executable JAR File mitgeben Java Basics - Anfänger-Themen 5
K File (png) in Image laden Java Basics - Anfänger-Themen 3
B Inputstream in file schreiben? Java Basics - Anfänger-Themen 23
S Input/Output Reader/Writer finden file nicht Java Basics - Anfänger-Themen 3
T Buffered Stream leert Txt File Java Basics - Anfänger-Themen 3
A 2d Arrays aus txt.file einlesen Java Basics - Anfänger-Themen 16
Dimax In Java File (nicht in Java Projekt) mysql Driver importieren Java Basics - Anfänger-Themen 3
K File wird in der .Jar nicht gefunden Java Basics - Anfänger-Themen 3
E TXT FILE EINLESEN Java Basics - Anfänger-Themen 4
Trèfle EXCEL-File Laufwerkunabhängig einbinden. Java Basics - Anfänger-Themen 1
B HTML File einlesen inkl. Bilder? Java Basics - Anfänger-Themen 2
B Hilfe bei InputStream To File Java Basics - Anfänger-Themen 22
A jar File kleiner bekommen Java Basics - Anfänger-Themen 3
B File öffnen in src/main/webapp Java Basics - Anfänger-Themen 4
K File-Name Vergleich Java Basics - Anfänger-Themen 2
S Maxium aus einer File finden Java Basics - Anfänger-Themen 12
dapzoo Class File Version zu niedrig? Ausführen über Eingabeaufforderung nicht möglich Java Basics - Anfänger-Themen 14
D Input/Output File exists canRead canWrite Java Basics - Anfänger-Themen 11
B cal4j - Error at line 1:Unexpected end of file Java Basics - Anfänger-Themen 0
P jar file lässt sich nicht ausführen Java Basics - Anfänger-Themen 4
E Best Practice Jar-file mit zwei Klassen und externer Bibliothek über Konsole erzeugen Java Basics - Anfänger-Themen 13
M Erste Schritte CSV-File einlesen und Daten verarbeiten Java Basics - Anfänger-Themen 5
F File von Windowsfreigabe laden Java Basics - Anfänger-Themen 1
S java.nio.file.FileSystemException bei Dateizugriff vermeiden Java Basics - Anfänger-Themen 7
Vince42 NIO File Tree in XML umwandeln Java Basics - Anfänger-Themen 10
J Zweidimensionales Array in CSV File exportieren Java Basics - Anfänger-Themen 3
E War-File Problem mit Eclipse Java Basics - Anfänger-Themen 3
B Excel File einlesen und Überschrift prüfen Java Basics - Anfänger-Themen 8
M Email versenden Outlook, attached File, ohne Anmeldung Java Basics - Anfänger-Themen 4
M Input/Output Word File Kopieren Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben