• Wir präsentieren Dir heute ein Stellenangebot für einen Java Entwickler - m/w/d in Augsburg, München, Stuttgart oder Bamberg. Hier geht es zur Jobanzeige

Runnable Jar-File erzeugen

C

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
 
kneitzel

kneitzel

Top Contributor
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>
 
C

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>
 
C

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.
 
C

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

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.
 
C

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

Thallius

Top Contributor
In der configuration

GEConstancyCheck :
          <configuration>
            <archive>
              <manifest>
                <mainClass>NameDerMainClass</mainClass>
              </manifest>
            </archive>
          </configuration>
 
C

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.
 
kneitzel

kneitzel

Top Contributor
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

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
 
C

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
 
kneitzel

kneitzel

Top Contributor
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 ...
 
C

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
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
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
K Runable Jar File erstellen Java Basics - Anfänger-Themen 17
T Java Executable jar file funktioniert nicht Java Basics - Anfänger-Themen 4
sourcecorn Werte aus einem File lesen Java Basics - Anfänger-Themen 6
Kopak'rraf Korruptes zip File. Java Basics - Anfänger-Themen 0
T File für Einstellungen wird nicht geladen Java Basics - Anfänger-Themen 1
S Sounddatei in Jar File integrieren Java Basics - Anfänger-Themen 2
S Index File bauen Java Basics - Anfänger-Themen 5
T Anzeige, wie lange es noch dauert bis ein File gesendet ist. Java Basics - Anfänger-Themen 2
T filereader , file aus programm einlesen Java Basics - Anfänger-Themen 12
Ghostman1711 Itext PDF print File gelockt by Java Java Basics - Anfänger-Themen 15
N Email mit Anhang - File not Found Java Basics - Anfänger-Themen 1
K Interface Kein Bild im .jar-File Java Basics - Anfänger-Themen 15
S Bild in Jar-File mit ImageIO Java Basics - Anfänger-Themen 50
Syncopated Pandemonium Compiler-Fehler The constructor MP3File(File) refers to the missing type NoMPEGFramesException Java Basics - Anfänger-Themen 7
S File mit canRead() testen Java Basics - Anfänger-Themen 4
A file.delete funktioniert nicht Java Basics - Anfänger-Themen 15
K Classpath Lesen von Property-File Java Basics - Anfänger-Themen 1
S jar file Java Basics - Anfänger-Themen 19
B Fragen zu ZIP-File Java Basics - Anfänger-Themen 9
B Dateityp von File bekommen Java Basics - Anfänger-Themen 2
I Automatisch Verzeichnis erstellen bei File erstellen Java Basics - Anfänger-Themen 5
E Große Datenmengen effizient in CSV File speichern Java Basics - Anfänger-Themen 4
I String zu File umwandeln Java Basics - Anfänger-Themen 2
N File virtuell ByteStream Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Anzeige

Neue Themen


Oben