# Mal wieder Probleme beim Erstellen eines JARs mit Eclipse



## McTrevor (9. Aug 2007)

Und zwar habe ich in Eclipse über die Exportfunktion die Anwendung exportiert. In Eclipse läuft das Programm einwandfrei. Das JAR-File läuft allerdings nicht:

```
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
	at java.lang.Class.forName0(Native Method)
        ...
```

Die entsprechende JAR-Datei mit dem Oracle Treiber steht im Build Path und ich habe auch im erzeugten JAR-File nachgeschaut. Die Datei ojdbc14.jar wird mit in das neue JAR gepackt. Woran liegt es also? Manifest wird auch erzeugt und auch die auszuführende main-Methode gebe ich an. 

Bis dann denn!

McTrevor


----------



## Wildcard (9. Aug 2007)

jar in jar geht nicht.


----------



## McTrevor (10. Aug 2007)

Und wie bekomme ich die nötigen Dateien (also insbesondere den Oracle DB Treiber) dann in mein JAR rein, so daß es läuft? Ich habe auch schon probiert, das ojdbc14.jar im selben Verzeichnis wie das Anwendungs-JAR abzulegen aber auch das funktioniert nicht...

Bis dann denn!

McTrevor


----------



## byte (10. Aug 2007)

Die nötigen externen Jars müssen im Classpath sein. Du kannst z.B. den Classpath im Manifest setzen oder als Parameter beim Aufruf angeben. Wurde hier glaub ich schon 2^10 mal besprochen.


----------



## padde479 (14. Aug 2007)

Lade Dir das Plugin _fatjar_ herunter. Dann kannst Du auch jar-Dateien mit exportieren und alles läuft einwandfrei.


----------



## MarcoBehnke (14. Aug 2007)

Oder um die Frage zu beantworten:

Deine Applikation braucht eine Manifest Datei, inder die externen Jars im Classpath stehe:


```
manifest.mf
Manifest-Version: 1.0
Main-Class: mein.paket.MeinMainKlasse
Class-Path: ojdbc14.jar
```

Dann lieferst Du die jars zusammen aus und es funktioniert. Du kannst zum Beispiel ANT benutzen, um deine Jars zu bauen (oder das oben beschrieben Plugin benutzen)

```
<project name="meinbuildfile" default="" basedir=".">
    <description>
		Ant tasks for this project
    </description>
	<target name="jar">
		<jar 	destfile="wo/soll/das/jar/hin/meinjar.jar"
				baseDir="./bin/"
				manifest="./manifest.mf"/>
	</target>
</project>
```


----------



## Sanix (14. Aug 2007)

FatJar funktioniert wirklich gut. Kann ich nur empfehlen.


----------



## pewex (14. Aug 2007)

Da Ihr schon beim Thema seid.

Ich habe heute den ganzen Tag mit dem fatjar rumexperimentiert und bekomme es nicht zum laufen.
Das progamm läuft zwar, aber alle Bilder die im Programm benutzt werden werden nicht mehr angezeigt.

Und eine zweite Frage:
Wie gibt man der erzeugten Jar das ganze  JRE mit, so dass es per Doppelklick überall ausführbar ist.



Mein Ziel ist es:
- nach Möglichkeit Alles in eine JAR zu packen und es soll zentral auf einem Server liegen und von dort
  ausführbar sein.


Meine Projekt-Struktur (es sind natürlich mehr Dateien in den einzelnen Ordnern drin)


+---bin
|   +---calculations
|   |   |   CalcButtonPanel.class
|   |   |   CalcPanel.class
|   |   |   
|   |   \---modules
|   |       |   ModulesPanel.class
|   |       |   ModulesPanelActivities.class
|   |       |         
|   |       \---calc04_10
|   |               Calc04_10Activities.class
|   |               Calc04_10Panel.java
|   |               
|   +---changeowner
|   |       ChangeOwnerActivities.class
|   |       ChangeOwnerPanel.class
|   |       
|   +---connection
|   |       ChkUserAccount.class
|   |       HandleDatabase.class
|   |       TranparentPanel.class
|   |       
|   +---contracts
|   |       ContractDialog.class
|   |       ContractDialogActivities.class
|   |       
|   +---main
|   |       MainFrame.class
|   |       Programmstart.class
|   |       
|   +---shared
|   |   +---classes
|   |   |       ChooseLanguage4Print.class
|   |   |       HandleMitarbeiterNamen.class
|   |   |       OptimizeTableColumnSize.class
|   |   |       Parameters.class
|   |   |       
|   |   \---panels
|   |           AuftragsNr_Jahr_Panel.class
|   |           LoggedNamePanel.class
|   |           PN_DN_Panel.class
|   |           
|   \---usermanagement
|           EditUserActivities.class
|           UserTreeBody.class
|           
+---img
|   +---background
|   |       background.gif
|   |       
|   +---CalcsXX
|   |       Calc04.jpg
|   |       Calc05.jpg
|   |       Calc06.jpg
|   |       
|   +---flags
|   |       flag_eng.jpg
|   |       flag_ger.jpg
|   |       
|   +---formulas
|   |       As.gif
|   |       Asd.gif
|   \---FrameIcon
|           Frame_Icon.jpg
|           
\---thirdparty
    +---JDBCdriver
    |       mysql-connector-java-5.1.0-bin.jar
    |  
    +---Webbrowser
    |       Opera
    |        unterordner1
    |        unterordner2
    |        unterordner3
    \---jre
         lib
           -jar1
           -jar2
         ext
           -jar1
           -jar2
         unterordner3
             -file1
             -file2


----------



## Wildcard (14. Aug 2007)

1)Du lädst die Resource falsch
2)So geht's nicht


----------



## pewex (14. Aug 2007)

Danke, für die schnelle Antwort.

Wenn du mit  Ressourcen die Bilder meinst, dann hebe ich auch soeben einen Tip bekommen.
Ich habe die Bilder mit File.getAbsoluthPath() geladen, aber dass ich wohl anders machen habe ich gelesen.
Irgendwie mit getRessource oderso. Werde ich mir morgen anlesen müssen.

Aber auf meine Frage zurückzukommen wegen dem JRE mitgeben. 
Kann man es irgendwie in ein Jar packen und zwar so, dass es beim doppelklick auf .jar verwendet wird ?

Gerade eben habe ich mir ein 3Zeiliges vb skript abgeschrieben, der eine gewöhnliche starteJar.bat ausführt aber das Konsolenfenster nicht öffnet, so kann ich wenigstens meine JRE verwenden
Bedenke, dass ich mein JavaProg von einer NetzwerkFreigabe laufen lassen möchte, ohne bei jedem Client Java installieren zu müssen.


----------



## Wildcard (15. Aug 2007)

1. nein, es geht definitiv nicht. Ein jar ist nichts anderes als ein zip. Lediglich die Verknüpfung zu einer JRE lässt es 'ausführbar' werden
2. etwa 98% aller Rechner haben bereits eine JRE installiert
3. würde dein Programm zur Bloatware werden wenn du jedem Client *noch eine* 120MB JRE verpasst


----------



## Leroy42 (15. Aug 2007)

Wildcard hat gesagt.:
			
		

> wenn du jedem Client *noch eine* 120MB JRE verpasst



120 MB?  :shock: 

Meine JRE benötigt insgesamt _nur_ 70.4 MegaBytes.


----------



## Wildcard (15. Aug 2007)

Leroy42 hat gesagt.:
			
		

> Meine JRE benötigt insgesamt _nur_ 70.4 MegaBytes.


Von mir aus auch das  :wink:


----------



## Leroy42 (15. Aug 2007)

Wildcard hat gesagt.:
			
		

> Leroy42 hat gesagt.:
> 
> 
> 
> ...



Ätsch!! Meiner ist kleiner!


----------

