Das Verständnis der Eclipse-classpath-Erklärungen
Ich versuche zu verstehen, die Eclipse-classpath-Datei, insbesondere, ich will das wissen:
- Wie ist die JRE nutzt (d.h. der JVM Lesen diese xml-Datei direkt, oder ist eclipse irgendwie die Einspeisung in den internen compiler)?
- Wie sind die komplexe Einträge (wie der Efeu Pfad unten) analysiert und fließen in die JVM ClassLoader, wenn ich mit meinen Klassen aus meiner IDE?
Kontext: ich habe ein seltsamen Fehler, dass eclipse mit der "falschen" version einer Klasse, in der Erwägung, dass mein Efeu /ant-build ist die richtige version, und ich möchte daher zum Werkzeug von Eclipse besser imitieren die classloader in meinem rein zu bauen. Um dies zu tun, ich denke, ich werde ein Blick auf die Eclipse-Projekt/classpath-Dateien.
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="test"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="lib" path="conf"/>
<classpathentry kind="con" path="org.apache.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER/?ivyXmlPath=ivy.xml&confs=*"/>
<classpathentry kind="output" path="build"/>
</classpath>
Ich glaube nicht, dass die JVM weiß etwas über die Eclipse-classpath-Datei. Sie können klopfen, eine test-Klasse mit einer main-block, der nur druckt-System.getProperty("java.Klasse.Pfad") - zeigen Sie, dass alle Ihre komplexe Referenzen werden nur gelöst, um jar-Datei Speicherorte auf der Festplatte, die dann eingespeist in einen normalen JRE-classpath. Wenn Sie einen obskuren bug mit den Ivy-Sachen, dann möchten Sie vielleicht zu erhöhen, es mit den Entwicklern der Ivy Eclipse-plugin? Viel Glück lösen Ihr Problem
InformationsquelleAutor jayunit100 | 2012-02-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zwei verschiedene Dinge:
1) Projekt-Klassenpfad verwendet wird, kompilieren Sie Ihren code mithilfe der Eclipse-Java-Compiler (ejc), so dass die Datei-information wird an den EJC.
2) Beim erstellen einer Startkonfiguration aus, die Sie eigentlich sind, erklärt den classpath für die Ausführung Ihrer Anwendung, die standardmäßig basierend auf dem Projekt-classpath. Dieser Klassenpfad wird als argument übergeben, um die JVM wie würden Sie es manuell tun (java -cp ${classpathentries} yourmainclass). Wenn Sie möchten, um herauszufinden, was genau den classpath Ihrer launch-Konfiguration starten Sie Ihre app/Klassen im debug-Modus, und in der Debug-Ansicht, wählen Sie den Prozess und klicken Sie auf Eigenschaften, wo sehen Sie die vollständige Klassenpfad (alle jars/Verzeichnisse als argument übergeben wird, um den JVM)
NB: ich kann nicht sehen, Ihr Efeu-Pfad Zeug.
Gibt es eine Möglichkeit, ändern Sie den Klassenpfad manuell in der launch-Konfiguration? Einige unserer dependency maven-Projekte haben die Prüfung Ressourcen unter src/test/resources source-Ordner. Die eclipse run-Befehl schließt die target/test-classes-Ordner, in den letzten classpath, das ist nicht das, was Wir wollten.
InformationsquelleAutor Guillaume Polet
Könnte das problem sein :
Es bedeutet, dass Sie in Ihrem eclipse-classpath, sollte man zwei verschiedene version der gleichen Klasse (zwei verschiedene jar-Dateien von der anderen version). Wenn das der Fall ist, dann versuchen zu entfernen. Auch in dem eclipse build path gibt es etwas namens "Build Order", wo Sie festlegen können, dass die Reihenfolge der classpath-jar versuchen, dies zu ändern.
InformationsquelleAutor Sajan Chandran