2012-02-14 72 views
10

我想了解Eclipse的類路徑的文件,特別是,我想知道這一點:瞭解Eclipse的類路徑聲明

  1. 是怎樣的JRE使用它(即是JVM閱讀本xml文件直接,或者是eclipse以某種方式將其饋入其內部編譯器)?

  2. 當我從我的IDE運行我的類時,如何將複雜條目(如下面的Ivy路徑)解析併合併到JVM ClassLoader中?

語境:我有一個奇怪的錯誤,這是Eclipse是使用一類的「錯誤」的版本,而我的常春藤/ Ant構建使用的是正確的版本,因此我想工具Eclipse來更好模仿我純粹構建中使用的類加載器。爲了做到這一點,我想我將不得不看看Eclipse項目/類路徑文件。

<?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

我不相信JVM知道有關Eclipse類路徑文件的任何信息。你可以用一個只打印出System.getProperty(「java.class.path」)的主模塊敲出一個測試類,它會告訴你所有的複雜引用都被解析爲磁盤上的jar文件位置,它們是然後饋入一個正常的JRE類路徑。如果你對常青藤的東西有一個模糊的錯誤,那麼你可能想和常青藤Eclipse插件的開發者一起提出它?祝你好運,解決您的問題 – davidfrancis 2012-02-14 12:08:28

回答

10

兩個不同的東西:

1)項目的classpath用於編譯使用Eclipse Java編譯器(EJC)你的代碼,因此文件信息傳遞給EJC。

2)創建啓動配置時,實際上是聲明類路徑來運行應用程序,默認情況下,該應用程序基於您的項目類路徑。這個類路徑作爲參數傳遞給JVM,就像你手動執行它(java -cp $ {classpathentries} yourmainclass)。如果您想查找啓動配置的類路徑,請在調試模式下啓動您的應用程序/類,並在調試視圖中選擇您的進程,然後單擊屬性,您將看到完整的類路徑(所有jar /作爲參數傳遞給JVM的目錄)

注意:我看不到你常春藤路徑的東西。

+0

感謝您指出「調試,屬性」,這就是我正在尋找的。 – 2016-01-09 01:44:56

+0

有什麼辦法可以在啓動配置中手動更改類路徑嗎?我們的一些依賴項maven項目在src/test/resources源文件夾下有測試資源。 eclipse run命令將把target/test-classes文件夾包含到最終的類路徑中,這不是我們想要的。 – Chris 2017-12-01 03:48:03

0

的問題可能是:

這意味着在Eclipse類路徑中,你應該有兩個不同版本的同一類的(不同版本的兩個不同的jar文件)。如果是這樣的話,請嘗試刪除一個。另外在你的eclipse構建路徑中有一些名爲「Build Order」的地方,你可以在其中指定classpath jar的順序,嘗試改變它。