2012-02-14 12 views
10

Próbuję zrozumieć plik classpath Eclipse, w szczególności, chcę o tym wiedzieć:Zrozumienie deklaracji classpath Eclipse

  1. Jak jest JRE używając go (tzn jest JVM przeczytaniu tego pliku xml bezpośrednio, czy też zaćmienie zasila go w swój wewnętrzny kompilator)?

  2. W jaki sposób złożone wpisy (jak na poniższej ścieżce do bluszczu) są analizowane i włączane do klasy JVM ClassLoader po uruchomieniu zajęć z mojego IDE?

Kontekst: Mam dziwny problem, który jest, że Eclipse jest za pomocą „złą” wersję klasy, podczas gdy mój bluszcz/ant build używa poprawnej wersji, a ja w ten sposób chcą narzędzia Eclipse lepiej naśladować program ładujący klasy użyty w mojej czystej kompilacji. Aby to zrobić, myślę, że będę musiał spojrzeć na pliki projektu Eclipse/classpath.

<?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&amp;confs=*"/> 
    <classpathentry kind="output" path="build"/> 
</classpath> 
+0

Nie wierzę, że JVM wie cokolwiek o pliku klasy classpath Eclipse. Możesz wybić klasę testową z głównym blokiem, który właśnie wypisuje System.getProperty ("java.class.path") - które pokaże, że wszystkie twoje złożone referencje są po prostu rozwiązane, aby zlokalizować pliki plików na dysku, które są następnie wprowadzane do normalnej ścieżki klas JRE. Jeśli masz jakiś niejasny błąd związany z tematem Ivy, to możesz chcieć go zgłosić u deweloperów wtyczki Ivy Eclipse? Powodzenia w rozwiązaniu problemu – davidfrancis

Odpowiedz

10

dwie różne rzeczy:

1) classpath projektu służy do kompilowania kodu przy użyciu Eclipse Java Compiler (EJC), więc informacje są przekazywane do pliku EJC.

2) Po utworzeniu konfiguracji uruchamiania, faktycznie deklarujesz ścieżkę klas do uruchomienia aplikacji, która domyślnie jest oparta na ścieżce klas projektu. Ta ścieżka klas jest przekazywana jako argument do maszyny JVM, tak jak zrobiłbyś to ręcznie (java -cp $ {classpathentries} yourmainclass). Jeśli chcesz dowiedzieć się, jaka jest dokładnie ścieżka klas konfiguracji uruchamiania, uruchom aplikację/klasy w trybie debugowania, aw widoku Debug wybierz proces i kliknij Właściwości, gdzie zobaczysz pełną ścieżkę klas (wszystkie słoiki/katalogów przekazanych jako argument do maszyny JVM)

NB: Nie widzę twoich ścieżek z bluszczem.

+0

Dzięki wskazaniu "debugowania, właściwości", tego właśnie szukam. –

+0

Czy można ręcznie zmienić ścieżkę klas w konfiguracji uruchamiania? Niektóre z naszych projektów zależnych mają zasoby testowe w folderze źródłowym src/test/resources. Polecenie eclipse run będzie zawierać folder target/test-classes w ostatecznej ścieżce klasy, co nie jest tym, czego szukaliśmy. – Chris

0

Problem może być:

Oznacza to w Zaćmienie ścieżki klasy, powinna być o dwie różne wersje tej samej klasy (dwa różne pliki jar z innej wersji). Jeśli tak jest, spróbuj ją usunąć. Również w ścieżce tworzenia zaćmienia znajduje się coś, co nazywa się "Zleceniem kompilacji", w którym można określić kolejność słoika ścieżek klas, spróbuj to zmienić.

Powiązane problemy