1. 程式人生 > >eclipse項目中.classpath文件詳解

eclipse項目中.classpath文件詳解

加載 內容修改 repl blog launch 輸出 pat 發的 user

1 前言

在使用eclipse或者myeclipse進行Java項目開發的時候,每個project(工程)下面都會有一個.classpath文件,那麽這個文件究竟有什麽作用?

2 作用

.classpath文件用於記錄項目編譯環境的所有信息,包括:源文件路徑、編譯後class文件存放路徑、依賴的jar包路徑、運行的容器信息、依賴的外部project等信息。如果把該文件刪除,則eclipse不能講該工程識別為一個正常的java工程,僅僅當做普通的文件夾而導致不能正常運行。

3 .classpath內容

.classpath文件其實也是一個xml格式的內容文件,其具體內容大致如下:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="src" path="resource"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.7">
        <attributes>
            <attribute name="owner.project.facets" value="java"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/學習 8080">
        <attributes>
            <attribute name="owner.project.facets" value="jst.web"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
    <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
    <classpathentry kind="output" path="WebContent/WEB-INF/classes"/>
</classpath>

①以”classpath”為根節點,每個“classpathentry”節點代表一個說明信息。
②每個“classpathentry”以“kind”屬性指明類型,“path”指明路徑。
③以上文件的所有內容,都是依賴項目中的“Java Build Path”內容改變而改變的,即對“java Build Path”的所有操作都會反應到文件內容中。
技術分享
現在來具體分析文件內容的每個節點含義

3.1 kind="src"

src:即source 源文件,代表的是一個源文件,path=”src”是一個相對路徑,相對.classpath文件本身,即path=”src”表示文件夾src與.classpath在同一個目錄,且代表源文件。

<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="resource"/>

kind=”src”的操作對應於“Java Build Path”的“Source”tab頁
技術分享
如下圖,增加一個文件夾bin作為源文件,則.classpath文件增加內容
技術分享
內容增加如下:

<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="bin"/>
<classpathentry kind="src" path="resource"/>

當然,做相應修改或刪除,同樣.classpath文件內容會相應改變。
另外,當指定屬性combineaccessrules=”false”是則代表引入外部project,具體如下

<classpathentry combineaccessrules="false" kind="src" path="/mybatis"/>

對應頁面tab,其中path=”/mybatis”,是相對應workspace下的絕對路徑。
技術分享

3.2 kind="output"

output用於指定java源文件編譯後的class文件存放路徑,格式如下

<classpathentry kind="output" path="WebContent/WEB-INF/classes"/>

path:代表存放class文件路徑,同樣是相對.classpath文件的路徑,找到“WebContent/WEB-INF/classes”,可以看到class文件的存放
技術分享

假設修改輸出文件路徑,則相應內容也會改變
改為:spring-mybatis\WebContent\WEB-INF\newclasses
技術分享
則.classpath文件內容修改為:

<classpathentry kind="output" path="WebContent/WEB-INF/newclasses"/>

實際存放class文件的路徑也會改變
技術分享

3.3 kind="con"

con即是Container,就是程序運行的容器,或者就說是運行環境也OK,它實際上是在Myeclipse最初的時候要配置installed JREs中指定(一般情況下我們指定的是JDK),但是這裏實際使用的是JDK下的JRE中的jar包,就是JDK_HOME/jre/lib就是對應的這條語句。具體內容如下

<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.7">
        <attributes>
            <attribute name="owner.project.facets" value="java"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/學習 8080">
        <attributes>
            <attribute name="owner.project.facets" value="jst.web"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
    <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>

對應操作tab如下

技術分享

3.3.1 JRE配置

path=”XXX”用於指定jre容器的使用情況,可選擇jre的不同來源,不同來源path的實際值會有些變化
技術分享
①選擇”Workspace default JRE(jdk1.7)”,則值為

path="org.eclipse.jdt.launching.JRE_CONTAINER"

②選擇“Alternate JRE”,則值為

path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.7"

其中最後麽的jdk1.7是我自定義的JRE名稱
③選擇”Execution environment”,即選擇eclipse自帶的內置jre,值為

path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"

其中最後麽的JavaSE-1.7是系統內置的JRE名稱
另外屬性值name=”owner.project.facets”

<attribute name="owner.project.facets" value="java"/>

應該是指定JRE容器的具體使用的模板,默認使用”java”,具體的沒有探究。

3.3.2 Server Runtime配置

同理,其他容器配置同上,如對Server Runtime 容器的配置,下面配置了tomcat容器運行環境

<classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/學習 8080"/>

3.3.3 Web App Libraries配置

<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>

3.3.4 User Library配置

<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/tomcat7"/>

3.4 kind="lib"

kind="lib"用於指定project依賴的Referenced Libraries,如圖增加了一個jar包
技術分享
則相應.classpath文件內容增加

<classpathentry kind="lib" path="WebContent/WEB-INF/lib/commons-dbcp-1.2.1.jar"/>

其中path指定了依賴的jar的相對路徑。

3.5 順序

.classpath文件中各節點的順序是通過tab-Order and Export 來控制的,不同的順序可能會引起加載class文件問題,一般是源碼放在最前面。
技術分享

eclipse項目中.classpath文件詳解