Erstellen einer ausführbaren JAR-Datei mit externen Libaries

Ollek

Bekanntes Mitglied
Hallo,

ich will gerade meine erste JAR Datei erstellen mit externenen Libaries erstellen..

Allerdings bekomme ich immer wieder die gleiche Fehlermeldung:
---------------------------
Java Virtual Machine Launcher
---------------------------
Could not find the main class: unterordner.SFTPCopy. Program will exit.
---------------------------
OK
---------------------------

Ich habe die JAR auch durch eine Konsole gestartet... Da habe ich folgende Exception bekommen... Ich muss sagen, in Eclipse läuft das Projekt einwandfrei, ohne Exceptions. Die Exception habe ich als JPG angehängt an den Post.

So meine Schritte, wie ich die JAR erstelle:

Schritte: src - rechtsklick - Export --> JAR File --> sourcen ausgewählt --> Next --> Next --> User existing manifest from workspace --> manifest.txt ausgewählt, die im Projekt liegt --> Finish

In meiner Manifest.TXT steht folgendes:

Java:
Manifest-Version: 1.0
Main-Class: de.unterordner.core.SFTPCopy
Class-Path: . ./ .lib/*.jar .lib/*.zip

Dann habe ich einen Ordner erstellt mit einem weiteren Ordner lib. Die JAR liegt im ersten Ordner.

Was mache ich denn nun falsch?? Die Exception, die die Konsole wirft hilft mir leider auch nicht weiter.. Bzw. ich verstehe es nicht, da es in Eclipse ja einwandfrei läuft... Muss es nur heute fertig bekommen :-( Quäle mich schon 2 Tage daran, habe schon lange gegoogelt und einiges ausprobiert.

Gruß

Ollek
 

Anhänge

  • ExceptionKonsole.jpg
    ExceptionKonsole.jpg
    34,6 KB · Aufrufe: 44
G

Gast2

Gast
Es gibt einen mehrere ANT Tasks um ein richtiges "FatJar" zu bauen. Z.B. One-JAR Task baut dir ein Jar in dem alle zur runtime benötigten Jars mit reingepackt werden.

Deliver Your Java Application in One-JAR™ !

Im build.xml musst du gar nicht mal viel machen, den Task einbinden:

[XML]
<property name="one-jar.dist.dir" value="./lib/compile/" />
<property name="one-jar.version" value="0.96" />

<path id="oneJar.Classpath">
<pathelement location="${basedir}/lib/one-jar-ant-task-${one-jar.version}.jar" />
</path>
<taskdef name="one-jar" classname="com.simontuffs.onejar.ant.OneJarTask" classpathref="oneJar.Classpath" />
[/XML]

Dann noch fix ein Manifest anlegen:

[XML]
<echo file="${build.dist}/${build.distname}.mf" append="false">
Manifest-Version: 1.0
Specification-Title: ${build.distname}
Main-Class: com.simontuffs.onejar.Boot
One-Jar-Main-Class: com.mypackage.MainClass
</echo>
[/XML]

Letzlich der Aufruf von dem OneJar Task:

[XML]
<one-jar destfile="${build.dist}/${build.distname}-standalone.jar" manifest="${build.dist}/${build.distname}.mf">
<main>
<fileset dir="${build.classes}">
<include name="**/**" />
</fileset>
</main>
<lib>
<fileset dir="./lib/runtime">
<include name="**/*.jar" />
</fileset>
</lib>
</one-jar>
[/XML]

Das funktioniert bei mir immer - einzige Ausnahmen ist wenn du native libs einpackst wie odbc und oci nutzt. Dann wirft der erste Classloader eine fiese Warnung - funktoniert aber trotzdem ;)
 
Zuletzt bearbeitet von einem Moderator:

eRaaaa

Top Contributor
Eclipse sollte das auch können, benutze anstatt
Code:
Export -> JAR File[/c] einfach mal[code]Export -> Runnable JAR File
(ab 3.4 *glaub*)
 
Zuletzt bearbeitet:

Ollek

Bekanntes Mitglied
Hat geklappt.... Allerdings habe ich meinen lib Ordner (hatte ich vorher im Projekt Ordner) in den src-Ordner gepackt und dann hate rs gemacht...

Aber ich würde trotzdem gerne mal wissen, wie man eine JAR Datei erstellt, die die libs aus dem lib ordner liest... Da ich das Programm ja so erweitern kann bzw. falls es mal updates gibt... Gibts dazu nen tutorial???
 

Ollek

Bekanntes Mitglied
habe ich auch gemacht, alelrdings hat er trotzdem gemeckert... Ansich ist das Thema ja erledigt, nur fürs nächste mal würde ichs halt schonmal gerne wissen und ausprobieren ;-)
 

Ollek

Bekanntes Mitglied
Wie meinst du das??

Also das jar liegt in einem Ordner und in diesem Ordner gibts einen Unterordner der lib heißt, wo die verschiedenenen Libaries drin liegen.
 
G

Gast2

Gast
Hat geklappt.... Allerdings habe ich meinen lib Ordner (hatte ich vorher im Projekt Ordner) in den src-Ordner gepackt und dann hate rs gemacht...

Aber ich würde trotzdem gerne mal wissen, wie man eine JAR Datei erstellt, die die libs aus dem lib ordner liest... Da ich das Programm ja so erweitern kann bzw. falls es mal updates gibt... Gibts dazu nen tutorial???

Was hast du gegen ANT? Ist eigentlich gar nicht so schwierig und aufwändig. Wenn du einmal eine Basis build.xml hast verwendest du die immer wieder:

Also hier kommt dein gefordertes Tutorial in kurzform:

Ich lege meine Projekte immer so an:


Code:
Project
  - src
  - test-src
  - lib
      \- compile // enthält nur libs die fürs compilieren notwenig sind, z.b. ant contrib
      \- runtime // enthält die libs die zur runtime benötigt werden
  - conf
  build.xml
  build.properties

Die build.xml enthält dann:
[XML]
<?xml version="1.0"?>
<project name="myProject" basedir="." default="ProjectBuild">

<description>
blubber
</description>

<property file="build.properties" />

<import file="${basedir}/lib/compile/one-jar-ant-task.xml" />

<!-- classpath -->
<path id="compilepath">
<pathelement location="${basedir}/lib/compile/ant-contrib-0.6.jar" />
<pathelement location="${basedir}/lib/compile/one-jar-ant-task-0.96.jar" />
</path>

<path id="classpath">
<fileset dir="${build.dir}/topack">
<include name="*.jar" />
</fileset>
</path>

<taskdef resource="net/sf/antcontrib/antcontrib.properties" classpathref="compilepath" />


<!-- ****************************************************************************************************************************
Default target
**************************************************************************************************************************** -->

<target name="ProjectBuild" depends="dist" description="build the project" />


<!-- ****************************************************************************************************************************
Private targets below...
**************************************************************************************************************************** -->

<target name="prepare" depends="clean">
<mkdir dir="${build.dir}" />
<mkdir dir="${build.dir}/src" />
<mkdir dir="${build.dir}/classes" />
<mkdir dir="${build.dir}/topack" />
<!-- copy source folders -->
<copy todir="${build.dir}/src" overwrite="true">
<fileset dir="${basedir}/src">
<include name="**/**" />
</fileset>
</copy>
<!-- copy libs -->
<copy todir="${build.dir}/topack" overwrite="true">
<fileset dir="${basedir}/lib/runtime">
<include name="**/**" />
</fileset>
</copy>
</target>


<target name="clean">
<delete dir="${build.dir}" />
</target>

<target name="compile" depends="prepare">
<javac srcdir="${build.dir}/src" destdir="${build.dir}/classes" deprecation="false" nowarn="true" target="1.6" source="1.6" debug="true" classpathref="classpath" debuglevel="lines,vars,source" />
</target>

<target name="manifest">
<if>
<equals arg1="${build.oneJar}" arg2="yes" casesensitive="false" />
<then>
<echo file="${build.dir}/MANIFEST.mf" append="false">
Manifest-Version: 1.0
Specification-Title: ${build.project}
Main-Class: com.simontuffs.onejar.Boot
One-Jar-Main-Class: ${build.mainclass}
</echo>
</then>
<else>
<echo file="${build.dir}/MANIFEST.mf" append="false">
Manifest-Version: 1.0
Specification-Title: ${build.project}
Main-Class: ${build.mainclass}
</echo>
</else>
</if>

</target>

<target name="dist" depends="compile,manifest">
<if>
<equals arg1="${build.oneJar}" arg2="yes" casesensitive="false" />
<then>
<echo>Building oneJar distribution</echo>
<one-jar destfile="${build.dir}/${build.project}-${build.version}-standalone.jar" manifest="${build.dir}/MANIFEST.mf">
<main>
<fileset dir="${build.dir}/classes">
<include name="**/**" />
</fileset>
</main>
<lib>
<fileset dir="${build.dir}/topack">
<include name="**/**" />
</fileset>
</lib>
</one-jar>
</then>
<else>
<echo>Building normal jar</echo>
<jar destfile="${build.dir}/${build.project}-${build.version}-nolib.jar" basedir="${build.dir}/classes}" manifest="${build.dir}/MANIFEST.mf">
</jar>
</else>
</if>
</target>

</project>
[/XML]

die build.properties:

[XML]
# the version of the build
build.version=0.01
# name of the project
build.project=myProject

# decides if a one Jar standalone version will be build or a classic jar
build.oneJar=Yes

# the Class with the main to start
build.mainclass = com.mypackage.MyMain
[/XML]

die one-jar-ant-task.xml in lib/compile
[XML]
<?xml version="1.0"?>
<project>
<!-- The following property is expected to be overridden by caller -->
<property name="one-jar.dist.dir" value="./lib/compile/"/>
<property name="one-jar.version" value="0.96"/>
<taskdef name="one-jar" classname="com.simontuffs.onejar.ant.OneJarTask"
classpath="${one-jar.dist.dir}/one-jar-ant-task-${one-jar.version}.jar" onerror="report"/>

</project>
[/XML]

Ansonsten in lib/compile rein:
ant-contrib-0.6.jar <- einfach mal nach googlen
one-jar-ant-task-0.96.jar - einfach mal nach googlen, bzw mein ersten kommentar folgen


Dann einfach die build.xml in den ANT view ziehen in Eclipse und doppelklicken - fertig.

EDIT: hab die build.xml nochmal angepasst
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
B Erstellen einer ausführbaren Datei Java Basics - Anfänger-Themen 3
F GSON file mit einer List erstellen Java Basics - Anfänger-Themen 2
I ArrayList erstellen innerhalb einer Zeile? Java Basics - Anfänger-Themen 3
M Wie kann ich ein Objekt erstellen, wenn sich der Klassenname in einer Variablen befindet? Java Basics - Anfänger-Themen 10
S Variablen Variablen in einer Schleife erstellen lassen Java Basics - Anfänger-Themen 11
O Anonyme Klasse einer Liste erstellen Java Basics - Anfänger-Themen 7
F Referenz an ein Objekt in einer anderen Klasse erstellen(Nullpointer exception) Java Basics - Anfänger-Themen 6
D Methoden JButton und JLabel in einer Methode erstellen Java Basics - Anfänger-Themen 5
J Erstellen einer Datei ohne path Java Basics - Anfänger-Themen 1
E Methoden Auf Methoden einer Klasse zugreifen, ohne ein Objekt zu erstellen Java Basics - Anfänger-Themen 2
W Objekt einer Unterklasse erstellen Java Basics - Anfänger-Themen 4
O OOP Methoden bei erstellen einer Instanz und mehr Java Basics - Anfänger-Themen 4
T Liste mit nur einer Klasse erstellen Java Basics - Anfänger-Themen 22
kaoZ Android Programmierung / Erstellen einer neuen Instanz Java Basics - Anfänger-Themen 2
B Klassen über Main Klasse in einer anderen Klasse ein Objekt erstellen Java Basics - Anfänger-Themen 5
L Aus einer String Variablen ein Objekt erstellen Java Basics - Anfänger-Themen 14
F erstellen einer neuen methode für das Zeichenfenster Java Basics - Anfänger-Themen 4
B Problem bei dem erstellen einer Main Methode Java Basics - Anfänger-Themen 4
K Komisches Verhalten beim erstellen einer Datei Java Basics - Anfänger-Themen 5
O Ungleiche Objekte in einer Schleife erstellen Java Basics - Anfänger-Themen 3
T Erstellen einer .csv-Datei Java Basics - Anfänger-Themen 12
A Probleme beim erstellen einer lauffähigen jar Java Basics - Anfänger-Themen 3
A Null Pointer Exception beim Erstellen eines Arrays aus einer eigenen Klasse Java Basics - Anfänger-Themen 3
D Wie Objekte einer Unterklasse erstellen? Java Basics - Anfänger-Themen 14
M Erstellen einer Suchleiste Java Basics - Anfänger-Themen 2
Z objekt erstellen von canonical name einer klasse Java Basics - Anfänger-Themen 6
B Erstellen einer Klasse aus einer Klasse Java Basics - Anfänger-Themen 4
E Frage zum RandomAcces und erstellen einer txt Java Basics - Anfänger-Themen 6
D Wie neue Instanz einer Klasse erstellen, von der ich nur eine andere Instanz kenne? Java Basics - Anfänger-Themen 13
V objekt einer Klasse erstellen Java Basics - Anfänger-Themen 21
K Erstellen einer Verknüpfung Java Basics - Anfänger-Themen 3
A Erstellen einer .dll für JNI mit MinGW Java Basics - Anfänger-Themen 13
C Erstellen und Beschreiben einer HTML-Datei Java Basics - Anfänger-Themen 4
G Erstellen einer JAR-Datei mit Ant-Scrit schlägt fehl Java Basics - Anfänger-Themen 2
M Variablenname mithilfe einer schleife erstellen? Java Basics - Anfänger-Themen 2
N jpg vom Inhalt einer JeditorPane erstellen. Java Basics - Anfänger-Themen 10
G Aus einer Methode zwei erstellen? Java Basics - Anfänger-Themen 3
N Verständnisproblem: Mehrere Objekte einer Klasse erstellen Java Basics - Anfänger-Themen 2
F Array einer eigenen Klasse erstellen. Java Basics - Anfänger-Themen 8
X Arrays - Erstellen einer Klasse zur Ausgabe von Reihen etc. Java Basics - Anfänger-Themen 12
B Befehl zum erstellen einer Zufallszahl. Java Basics - Anfänger-Themen 8
J Erstellen einer Klasse Java Basics - Anfänger-Themen 12
M Wiederholung in einer Laufschrift erstellen Java Basics - Anfänger-Themen 10
G Problem beim erstellen einer .jar Datei Java Basics - Anfänger-Themen 9
M erstellen einer Datenbank Java Basics - Anfänger-Themen 17
G Probelm mit Runtime exec! Erstellen einer neuen Konsole. Java Basics - Anfänger-Themen 2
XWing Int erstellen lassen? Java Basics - Anfänger-Themen 11
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
A exe Datei erstellen Java Basics - Anfänger-Themen 8
J Packages erstellen Java Basics - Anfänger-Themen 7
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
D MacOS: PDF erstellen geht nicht Java Basics - Anfänger-Themen 1
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
C Gewinnspiel erstellen mit Algorithmus Java Basics - Anfänger-Themen 3
Ostkreuz Spielfeld Schatz erstellen Java Basics - Anfänger-Themen 5
I Erste Schritte Einfache Datenbank-Webseite erstellen als Nicht-IT-lerin Java Basics - Anfänger-Themen 24
T Objekte mit arrays erstellen Java Basics - Anfänger-Themen 6
B Klasse statisch erstellen da n-mal geladen Java Basics - Anfänger-Themen 3
laxla123 Dreieck erstellen Java Basics - Anfänger-Themen 1
XWing Random Punkte erstellen mit der Random klasse Java Basics - Anfänger-Themen 15
A Passwort erstellen Java Basics - Anfänger-Themen 3
S CVS erstellen Java Basics - Anfänger-Themen 1
RashAGhul Java Verwaltungstool Erstellen mit kaum Wissen Java Basics - Anfänger-Themen 9
K warum kann ich das Objekt nicht erstellen ? Java Basics - Anfänger-Themen 2
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
dennis_lnz Klassen Wie kann ich mein Java Textadventure verbessern, um ein Klassendiagramm zu erstellen? Java Basics - Anfänger-Themen 9
dcHost Java Kara Sensor erstellen Java Basics - Anfänger-Themen 1
JustAProgrammer Ein Dreieck mit Arrays erstellen Java Basics - Anfänger-Themen 2
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
F abbruch Exception lässt sich nicht erstellen Java Basics - Anfänger-Themen 2
U JList erstellen Java Basics - Anfänger-Themen 2
X Wie kann man ein Regex erstellen, die 8-Bit-Binär-Zahlen darstellen. Java Basics - Anfänger-Themen 1
httprt Probleme bei dem erstellen von leveln in meinem Spiel Java Basics - Anfänger-Themen 2
frager2345 Programm erstellen ohne Autoboxing und Unboxing Java Basics - Anfänger-Themen 13
berserkerdq2 IO Streams logfile erstellen und Sachen schreiben wie? Java Basics - Anfänger-Themen 2
B Teilprofil erstellen Java Basics - Anfänger-Themen 1
B Teilprofil erstellen Java Basics - Anfänger-Themen 1
I String Kombination erstellen anhand fortlaufender Zahl (Vertragsnummer) Java Basics - Anfänger-Themen 13
N 2D Array Summe erstellen Java Basics - Anfänger-Themen 6
T Log Funktion erstellen Java Basics - Anfänger-Themen 1
Dorfschmied Kartesisches Produkt von zwei Liste mit Hashmaps<String,String> erstellen Java Basics - Anfänger-Themen 4
S Programm erstellen Java Basics - Anfänger-Themen 3
S MinMax Programm erstellen Java Basics - Anfänger-Themen 4
S Mit for-Schleife ein 2D JLabel-Array mit veränderbaren Icons erstellen Java Basics - Anfänger-Themen 3
T Countdown erstellen Java Basics - Anfänger-Themen 7
I ZIP File erstellen Java Basics - Anfänger-Themen 10
L Ordner in neuen erstellten Ordner erstellen Java Basics - Anfänger-Themen 12
C Fehler beim erstellen eines Objektes Java Basics - Anfänger-Themen 3
B Zurück Button erstellen Java Basics - Anfänger-Themen 1
melaniemueller Lagerverwaltung erstellen - mehrdimensionale Arrays Java Basics - Anfänger-Themen 62
B JaxB - Referenzen erstellen? Java Basics - Anfänger-Themen 2
K Rekursion: Rechenmauer mit Array erstellen Java Basics - Anfänger-Themen 17
alice98 Erste Schritte Liste erstellen ohne vorgefertigte Klassen Java Basics - Anfänger-Themen 1
Aqtox Hallo ich muss für die Schule ein Wuerfell Duell erstellen jedoch habe ich ein fehler Java Basics - Anfänger-Themen 4
E Classpath Datai erstellen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen


Oben