2016-07-15 5 views
0

Hier ist meine Java-Version:Java lädt Datei mit nicht JAR-Erweiterung

# java -version 
java version "1.4.2" 
Java(TM) 2 Runtime Environment, Standard Edition (build 2.2) 
IBM J9SE VM (build 2.2, J2RE 1.4.2 IBM J9 2.2 Linux amd64-64 j9xa64142-20080130 (JIT enabled) 
J9VM - 20071205_1933_LHdSMr 
JIT - r7_level20071016_1845) 

(dieser Teil der IBM Information Server ist)

Es gab einige Updates, die ich hatte, um die Live-Anwendung bereitstellen, damit ich musste eine der bestehenden jar Dateien ersetzen. Offensichtlich habe ich ein Backup der alten mylibrary.jar Datei gemacht und ich nannte es mylibrary.jar.old.

Nach dem Start der Anwendung, nach mehreren schmerzhaften Stunden Debugging, bemerkte ich, dass - aus irgendeinem Grund - mylibrary.jar wurde nicht geladen und mylibrary.jar.old wurde tatsächlich geladen.

Tatsächlich befinden sich beide im Klassenpfad, aber ich habe erwartet, dass Dateien mit einer Nicht-JAR-Erweiterung nicht geladen werden. Ich bin mir sicher, dass dies der Fall ist und ich das Problem reproduzieren kann.

Fehle ich etwas? Ich konnte diesbezüglich auf der Oracle-Website nichts finden.


EDIT: ich auch mit Java von Oracle und das gleiche passiert getestet haben.

java version "1.7.0_51" 
Java(TM) SE Runtime Environment (build 1.7.0_51-b13) 
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode) 
+0

Überprüfen Sie die IBM Dokumentation, da Ihre Versionsinformationen angeben, dass Sie eine IBM JRE und keine Sun/Oracle JRE verwenden. – dsh

+0

Welche IDE verwenden Sie (falls vorhanden?) – Defenestrator

+0

Nein, ich verwende keine IDE. Dies ist ein JAR-Dateiteil von IBM Information Server 8.1 - http://www.ibm.com/support/knowledgecenter/SSZJPZ_8.1.0/com.ibm.swg.im.iis.productization.iisinfsv.sdfnav.doc/ dochome/iisinfsrv_home.html (ojb-conf.jar - wenn es relevant ist). Diese JAR sollte die Datenbankverbindungsdetails enthalten. – Razvan

Antwort

3

Tatsächlich sind Klassen geladen, keine Gläser. jar ist eine Art von Zip-Format und JVM lädt träge Klassen durch Entpacken des Glases.

Mit Java extension Mechanismus ist es möglich, dass JVM Klassen in einer Datei (zip) laden kann, die nicht unbedingt eine .jar-Erweiterung haben muss.

Die Seite here erklärt im Detail, wie ein Jar ohne sogar eine Erweiterung von VM geladen werden könnte.

Ihr altes Glas im Format mylibrary.jar.old kann perfekt entpackt werden. Testen Sie mit 7-zip. So könnte JVM die Klassen bei Bedarf von diesem alten Glas laden, warum nimmt es nicht von mylibrary.jar anstelle von mylibrary.jar.old ab? Ich nehme an, es ist, weil JVM Standard-Klassen-Laden in die Gläser von Date Modified aussehen kann und weil bereits eine Klasse gefunden wird JVM nicht in anderen Gläsern suchen.

Auch würde ich lieber mylibrary.jar.old aus Ihrer Anwendung entfernen und sichern Sie es irgendwo anders in dem Verzeichnis nicht im Java classpath angegeben.

+1

Ok, so scheint es, wahrscheinlich , der Erweiterungsmechanismus wird verwendet und "* [..] Alle JAR-Dateien (auch wenn eine andere Erweiterung als .jar oder keine Erweiterung vorhanden ist) in bestimmten Verzeichnissen werden geladen. *". – Razvan

Verwandte Themen