eclipse項目中.classpath文件詳解


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> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

①以”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"/>
  • 1
  • 2

kind=”src”的操作對應於“Java Build Path”的“Source”tab頁 
這里寫圖片描述 
如下圖,增加一個文件夾bin作為源文件,則.classpath文件增加內容 
這里寫圖片描述 
內容增加如下:

<classpathentry kind="src" path="src"/> <classpathentry kind="src" path="bin"/> <classpathentry kind="src" path="resource"/>
  • 1
  • 2
  • 3

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

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

對應頁面tab,其中path=”/mybatis”,是相對應workspace下的 
絕對路徑。 
這里寫圖片描述

3.2 kind="output"

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

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

path:代表存放class文件路徑,同樣是相對.classpath文件的路徑,找到“WebContent/WEB-INF/classes”,可以看到class文件的存放 
這里寫圖片描述

假設修改輸出文件路徑,則相應內容也會改變 
改為:spring-mybatis\WebContent\WEB-INF\newclasses 
這里寫圖片描述 
則.classpath文件內容修改為:

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

實際存放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"/>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

對應操作tab如下 
這里寫圖片描述

3.3.1 JRE配置

path=”XXX”用於指定jre容器的使用情況,可選擇jre的不同來源,不同來源path的實際值會有些變化 
這里寫圖片描述 
①選擇”Workspace default JRE(jdk1.7)”,則值為

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

②選擇“Alternate JRE”,則值為

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

其中最后么的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"
  • 1

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

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

應該是指定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"/>
  • 1

3.3.3 Web App Libraries配置

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

3.3.4 User Library配置

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

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"/>
  • 1

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

3.5 順序

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

版權聲明:本文為博主原創文章,水平有限,歡迎批評與指正。 http://blog.csdn.net/pengmm1990/article/details/68951389
 
 
 

.project 文件

      <?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>CreateInterpret</name>
    <comment>JavaCC Nature@key 32303037303632392D3130303020437265617465496E746572707265742F777063 </comment>
    <projects>
    </projects>
    <buildSpec>
        <buildCommand>
            <name>sf.eclipse.javacc.javaccbuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
    </buildSpec>
    <natures>
        <nature>org.eclipse.jdt.core.javanature</nature>
        <nature>sf.eclipse.javacc.javaccnature</nature>
    </natures>
</projectDescription>

 從數據上看,我們可以了解到這些配置主要是描述工程的基本信息:

  1. 工程名<name></name>
  2. 工程注釋描述<comment></comment>
  3. 運行時需要的額外Eclipse插件<natures></natures>,及其具體加載方式信息<buildSpec></buildSpec>

如果你在開發過程中向工程里面加入了很多額外的插件,則必然會導致你的Eclipse啟動速度變慢。在這種情況下,你可以到這個文件里面去掉一些插件,不過這樣一來你在開啟那些關聯文件的時候會加載那些插件。

 

 

JAVA中path和classpath具體是什么意思?

path 路徑,是java編譯時需要調用的程序(如java,javac等)所在的地方
classpath 類的路徑,在編譯運行java程序時,如果有調用到其他類的時候,在classpath中尋找需要的類。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM