# eingebundene *.jar- Files



## PollerJava (12. Jul 2007)

Hallo,

ich hätte eine Frage zu den eingebundenen *.jar- Files und zwar habe ich bei meinem Projekt einige externe *.jar- files einbinden müssen (jcomm.jar, jbatik.jar, jdom.jar) in C:\Programme\Java\jdk1.6.0\jre\lib\ext.

Wenn ich jetzt das Projekt/Programm weitergebe, dann müssen diese von mir verwendeten *.jar- Dateien auf einem anderen Rechner wieder eingebunden werden.

Mein eFrage wäre jetzt, wie das üblciherweise gemacht wird, kann man die *.jar. Dateien mit dem Projekt irgendwie mitgeben, sodass das Programm sofort auf einem anderen Rechner lauffähig ist?


lg


----------



## mikachu (12. Jul 2007)

ich denke mal, da musst du den pfad dann anpassen...
den javapfad (PATH glaub ich)


----------



## thE_29 (12. Jul 2007)

Du kannst sie alle in eins zusammenpacken!

Geht mit einer guten IDE oder in den FAQ ist auch beschrieben wie es geht!


----------



## Gast (12. Jul 2007)

http://www.java-forum.org/de/viewtopic.php?t=52218&highlight=manifest


----------



## thE_29 (12. Jul 2007)

Oder auch dieser Weg!

Da musst du dein Jar Archiv updaten mit -umf datei.jar MANIFEST.MF und in der MANIFEST.MF gibst halt die anderen Jar Files im Classpath an!

Achtung! Wenn du es testen willst, das geht nicht java -cp datei.jar -jar main.jar

Bei -jar wird der -cp Eintrag ignoriert!!


----------



## PollerJava (12. Jul 2007)

Ich verwende NetBeans, weiß vielleicht jemad wie das dann geht,

Ich hab da auch noch ein Verständnissproblem:
ich habe mir die benötigten *.jar- Files runtergeladne und in den Pfad C:\Programme\Java\jdk1.6.0\jre\lib\ext gegeben.

Wenn ich jetzt meinen Projekt- Ordner weitergebe, dann sind ja die von mir downgeloadeten *.jar files dort nicht vorhanden.
Ich müsste also die benötigten *.jar- Files irgendwie in meinen Projekt- Ordner transferieren,

sehe ich das richtig oder liege ich da falsch?


lg und danke für die Antworten


----------



## thE_29 (12. Jul 2007)

Naja, java lädt Standardmäßig die Dateien aus dem ext Verzeichnis!

Dh, du hast 4 Optionen
1. du legst sie auch beim Kunden in das ext Verzeichnis
2. du machst alle Dateien in ein Jar Archiv
3. du passt die Manifest.MF an und machst CP Einträge
4. du machst ne Bat Datei, wo du die cp Einträge hast (aber ohne -jar Präfix)


----------



## Gast (12. Jul 2007)

Ich würde einfach ne Fat_Jar erstellen das nimmt die Jars dann mit in dein Hauptjar.


----------



## PollerJava (12. Jul 2007)

2. du machst alle Dateien in ein Jar Archiv 
Das scheint mir die beste/eleganteste Möglichkeit aber leider noch nie gemacht,
Wie kann ich das machen (vielleicht mit NetBeans)??

Dankeschön


PS: was heißt eigentlich cp


----------



## loadbrain (12. Jul 2007)

Mit NetBeans:
Erstelle im src Verzeichnis ein Ordner z.b. jars und füge die Dateien da ein.
In NetBeans gehst du dann im Projekt-Explorer auf dein Projekt, rechte Maustaste , Properties, Libraries, unter Compile dann Add Jar/Folder.
Die Dateien packts Dir dann alle beim bauen mit ein.


----------



## PollerJava (12. Jul 2007)

Vielen Dank,

ich habs jetzt so gemacht und es funktioniert auch, wenn ich auf einem anderen Computer die *.jar wieder einbinde mit Add jar.

aber über die Konsole lässt sich das Projekt nicht starten (javac Myprojekt.java), da findet der Compiler eben die *.jar files nicht.
Muss ich irgendwas setzen mit einem Schalter oder wie geht das über die Konsole bzw. wenn ich eine *.bat- datei machen will, was muss ich da reinschreiben?


Und noch eine Frage hätte ich zum compilieren: wenn ich mehrere Packages habe, wie compiliere ich da alle *.java- files in allen Packages?


Vielen Dank für Eure Antworten

lg


----------



## thE_29 (12. Jul 2007)

Wie startest du bitte das Programm in der Konsole?

Mit javac? Weißt du überhaupt was du tust?

javac == kompilieren
starten == java (ohne .java hinten)
jar starten == java -jar datei.jar


----------



## PollerJava (12. Jul 2007)

jaja ich hab mich verschrieben: 
natürlich starte ich mein programm mit java myProjekt.

das weiß ich schon aber ich meinte, dass ich eben beim Kompilieren mit javac Fehlermeldungen bekomme, dass der Kompiler die *.jar- Dateien nicht findet


Meine Schwierigkeit ist eben, dass ich meinen ProjektOrdner weitergeben will und dann nicht lange erklären will was zu setzen ist oder wie es zu starten ist sondern einfach Kompilieren mit javac und interpretieren mit java


----------



## thE_29 (12. Jul 2007)

Die musst du natürlich im cp angeben!

Also javac -classpath datei.jar DeinJavaFile.java


----------



## PollerJava (12. Jul 2007)

thE_29 hat gesagt.:
			
		

> javac -classpath datei.jar DeinJavaFile.java



d.h. dann also, ich habe 6 externe *.jar- Files und ich muss 6mal -classpath datei.jar schreiben bzw. das 6 mal in die *.bat datei schreiben?


----------



## thE_29 (12. Jul 2007)

Nein!

Du schreibst javac -classpath datei1.jar;datei2.jar;datei3.jar main.java

Hinter dem letzten kein ;!!

Unter Linux gehört statt einem ; ein :!


----------



## PollerJava (12. Jul 2007)

Vielen Dank,

ich hab aber mit der Aufteilung in Packages noch so meine Probleme,

ich gebe in der Konsole einfach in das Package wo meine main- Methode drinnen ist und kompiliere die *.java- Datei mit der main- Methode,
leider kann der Kompiler dann die Klassen in anderen Packages nicht finden,

wie kannich da machen, damit er auch die anderen Packages findet und kompiliert?

lg


----------



## thE_29 (12. Jul 2007)

Du darfst nicht reingehen!

Du musst es mit javac -cp ... dein.package.main sagen!

Darfst aber nicht im Ordner /dein/package/ stehen sondern dort wo /dein Ordner auch liegt!

Zb wenn die Java Datei hier C:\java\projekt1\dein\package\Main.java wäre
Dann müsstest du im C:\java\projekt1 Verzeichnis stehen!


----------



## loadbrain (12. Jul 2007)

Also, wenn du das mit NetBeans so gemacht hast wie ich gesagt habe, dann kannst du aus Deinem dist ordner die datei.jar direkt per doppelklick starten.
auf der console einfach in das verzeichnis wechseln und wie schon thE_29 geschrieben hat mit 





> java -jar datei.jar


 starten.


----------



## PollerJava (12. Jul 2007)

ich wollte jetzt eben im Ordner dist meine myProjekt.jar starten, bekomme aber eine Fehlermeldung und zwar habe ich eine XML- Datei die ich einlese und die im Ordner Konfiguration ist und die findet er natürlch nicht, ich hab diese XML- Datei auch schon in den dist- Ordner kopiert aber er will nicht,

Fehlermeldung:


```
fehler beim Emlesen der XML- Datei in der Klasse Control, IOException: java.io.FileNotFoundException
```

Kann ich ihm das irgendwie mitteilen,

im Programm hab ichs ihm so gesagt:

readStates(System.getProperty("user.dir") + "\\Konfiguration\\KonfigComponents.xml");


----------



## loadbrain (12. Jul 2007)

Lass dir mal den pfad von 
	
	
	
	





```
System.getProperty("user.dir") + "\\Konfiguration\\KonfigComponents.xml");
```
 ausgeben, dann siehst du wo das liegt.
Am einfachsten du machst das mit der Datei genauso wie mit den jars.
Dann kannst Du im Programm über

```
InputStream ist = this.getClass().getResourceAsStream( "/Konfiguration/KonfigComponents.xml" );
```
 darauf zugreifen, sowohl dann direkt aus NetBeans wie später aus dem dist ordner.


----------



## PollerJava (12. Jul 2007)

da versteh ich jetzt nicht was du meinst.
die soll ich mir den Pfad ausgeben,
mit NetBeans funktionierts ja ienwandfrei, warum geht das über die Konsole nicht und meine Methode schaut so aus:

 private Vector readStates(String xmlFile), ich kann also nur einen String an diese Methode übergeben?

Kannst du mir da nochmal weiterhelfen


```
Mit 
readStates(System.getProperty("user.dir") + "\\Konfiguration\\KonfigComponents.xml"); 
gibt er genau das aus und das müsste ja auch passen, NEtBeans verstehts ja auch

C:\Projekte\java\myProjekt\Konfiguration\KonfigComponents.xml
```

lg und vielen dank


----------



## loadbrain (12. Jul 2007)

Du hast selbst geschrieben, Du hast eine 
	
	
	
	





```
java.io.FileNotFoundException
```
, also wir die Datei nicht gefunden, ganz einfach.
Bau doch mal den kompletten Pfad fest ein & teste ob es dann geht.


----------



## PollerJava (12. Jul 2007)

hab ich schon gemacht aber geht nicht, gleicher Fehler,

was mich so irritiert ist, dass es in der IDE NetBeans funktioniert und über die Konsole soll er den Pfad auf einmal nicht mehr kennen, das versteh ich einfach nicht.

Weiß du da einen Grund dafür?


----------



## loadbrain (12. Jul 2007)

wie hast du es denn eingegeben?


----------



## PollerJava (12. Jul 2007)

Also ich hab z.B. meine Bilder in den Ordner Pics getan, meine Konfiguratiuonsdatei in den Ordner Konfiguration,
das mag er über die Konsole nicht, das kann ich schon mal sagen, das ist mit den Bildern das gleiche,
Keine Ahnug warum das so ist,
auf jeden Fall gehts jetzt aber die Ordnung in meinem ProjektOrdner ist wieder dahin.

Vielleicht weiß ja da noch jemand eine Abhilfe?

Vielen dank auf jeden Fall für Eure sehr hilfreichen Antworten!!

lg


----------



## loadbrain (12. Jul 2007)

Hm, also, wenn Du in Deinen src ordner die ordner pics etc anlegst und dann über getResourceAsStream() darauf zugreifst, dann geht das, mehr kann ich jetzt auch nicht dazu sagen, so mache ich das immer und das geht. Ich hatte genau Dein Problem auch, aber so klappt das dann.
Oder du machst es folgendermassen:
Du legst direkt in Deinem Projektordner die Ordner pics und Konfiguration an, greifst im Quelltext dann über "/pics" darauf zu, dann must du in Deinen dist Ordner allerdings die beiden Ordner kopieren, sonst werden Sie nicht gefunden und ob Du das willst weiss ich nicht...
Letztendlich, du hast eine java.io.FileNotFoundException also wird die Datei nicht gefunden, daran gibt es nichts zu rütteln...   
Also musst du was mit Deiner Art des Zugriffes ändern, wie auch immer.
So, bin jetzt weg, erst morgen wieder verfügbar...


----------



## Katjushka (28. Jul 2007)

Hallo,
ich möchte auch eine .jar library in meinen Code einbinden, damit alles zusammen in einer .jar Datei liegt und per Doppelclick ausführbar ist. Ich arbeite mit NetBeans. Ich bin nach folgender Anleitung vorgegangen:



			
				loadbrain hat gesagt.:
			
		

> Mit NetBeans:
> Erstelle im src Verzeichnis ein Ordner z.b. jars und füge die Dateien da ein.
> In NetBeans gehst du dann im Projekt-Explorer auf dein Projekt, rechte Maustaste , Properties, Libraries, unter Compile dann Add Jar/Folder.
> Die Dateien packts Dir dann alle beim bauen mit ein.




Dann habe ich normal auf Build > Build main project geclickt
Wenn ich das jar nun aber in einen anderen Folder als src verschiebe, meldet Java auf der Konsole einen NoClassDefFoundError, weil meine Bibliotheks-jars offensichtlich nicht in mein Haupt-jar eingebunden wurden. 

Was habe ich denn falsch gemacht?

Danke

Katya


----------



## Gast (1. Aug 2007)

Genau das gleiche Problem habe ich auch zur Zeit!

Soweit ich es verstanden habe, kann man zwar die Library in die Hauptjar einbinden, aber dann nicht relativ auf sie verweisen.

Stimmt das oder gibt es doch eine Möglichkeit?

Mfg


----------

