# Probleme mit jar File



## lymez (10. Nov 2006)

Hallo Zusammen, 

ich habe merkwürdige Probleme mit einem jar - File. Zunächst zum Hintergrund meiner JAVA Tätigkeit. 

Ich möchte aus einer kleinen JAVA Applikation heraus auf Daten in einem SAP System zugreifen. SAP hat für diesen Zweck den so genannten JAVA Connector entwickelt. Für die Funktionsweise des Connectors werden einige dll's benötigt, die ich installiert habe. Alle benötigten JAVA Klassen werden in einem jar -file der SAP ausgeliefert. Das jar - File heißt sapjco.jar. 

Ich habe nun eine Klasse geschrieben, die einige Java Klassen aus dem jar file verwendet. Wenn ich meine class Datei ausführe, funktioniert der JAVA Aufruf auch problemlos und ich bekomme die gewünschten Daten aus dem SAP System zurück. Nun habe ich meine Klassen inkl. des sapjco.jar files in ein großes jar - file gepackt. Hierfür habe ich zunächst das Fat-Jar Plugin für eclipse verwendet. Bei ausführen des jar - files hat er mir aber einen Fehler bei der Initialisierung einer von JCO verwendeten dll gemeldet. Als ich dann meine Klasse inkl. sapjco.jar über die Konsole in ein jar - file gepackt hatte, trat auch keine Besserung ein. Immernoch derselbe Fehler. 

Was mache ich denn falsch? Der Aufruf über die class - Datei funktionert, aber über jar - file nicht. D.h. es liegt ja wohl nicht an fehlenden dll's! Das allerbeste aber: Wenn ich mein erstelltes jar - File (das was sapjco.jar und meine Klassen beinhaltet) in eclipse in ein neues Projekt einfüge und über eine neue Klasse aufrufe, funktioniert es wieder und ich bekomme die korrekten Werte aus SAP. 

Die SAPJCO.JAR habe ich auch in der CLASSPATH Variable von Windows. Ausserdem hatte ich sie auch schon mal in der Class-Path Variablen der manifest.mf Datei. Aber ob drin oder nicht. Es funzt nicht. 

Vielleicht kann mir irgendjemadn hier helfen??? 

Danke! 

MfG 
Timo


----------



## Wildcard (10. Nov 2006)

Was hast du mit den dlls gemacht? Windows kann keine Bibliotheken aus Archiven laden.


----------



## lymez (13. Nov 2006)

Die dll's sind ja auch nicht in Archiven. DIe stehen genau dort, wo sie laut SAP JCO Anleitung stehen sollen. Nämlich im System32 Ordner des Windows Verzeichnisses.

Irgendeine Idee wo mein Problem liegt....?

Danke!

Gruß
Timo


----------



## thE_29 (13. Nov 2006)

Poste mal den genauen Fehler (exception)


----------



## lymez (14. Nov 2006)

Hier der Fehler:

C:\temp\classes>java -jar STI.jar
Exception in thread "main" java.lang.ExceptionInInitializerError: JCO.classIniti
alize(): Could not load middleware layer 'com.sap.mw.jco.rfc.MiddlewareRFC'
JCO.nativeInit(): Could not initialize dynamic link library sapjcorfc [no sapjco
rfc in java.library.path]. java.library.path [C:\WINDOWS\system32;.;C:\WINDOWS\S
ystem32;C:\WINDOWS;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\j2
sdk1.4.2_12\bin;c:\JavaConnector\sapjcorfc.dll;c:\JavaConnector\sapjco.jar;]
        at com.sap.mw.jco.JCO.<clinit>(JCO.java:776)
        at de.lymez.sti.SAPAufruf.getDocnr(SAPAufruf.java:26)
        at de.lymez.sti.Aufruf.main(Aufruf.java:12)

im STI.jar sind alle benötigten Klassen vorhanden!

Gruß
Timo


----------



## Yzebär (16. Nov 2006)

Ich würde die sapjco.jar und deine anderen Klassen trennen und die jars beim Aufruf der der java.exe unter der Option -cp referenzieren (zB java -cp C:/meinordner/mein.jar -jar blabla ). Sowas sollte eigentlich funktionieren... (wenn du die jars zusammenpackst kannst du sie auch nicht mehr unabhängig voneinander austauschen).


----------



## Murray (16. Nov 2006)

java.lang.ExceptionInInitializerError hat gesagt.:
			
		

> JCO.classInitialize(): Could not load middleware layer 'com.sap.mw.jco.rfc.MiddlewareRFC'
> JCO.nativeInit(): Could not initialize dynamic link library sapjcorfc [no sapjcorfc in java.library.path].
> java.library.path [C:\WINDOWS\system32;.;C:\WINDOWS\System32;C:\WINDOWS;
> C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
> C:\j2sdk1.4.2_12\bin;c:\JavaConnector\sapjcorfc.dll;c:\JavaConnector\sapjco.jar;]



Der Java-Library-Path sollte die Verzeichnisse enthalten, in denen DLLs zu suchen sind (und nicht die DLLs selber).
Also: c:\JavaConnector statt c:\JavaConnector\sapjcorfc.dll


----------

