談談Java的classpath

來源:互聯網
上載者:User

標籤:產生   --   static   路徑名   public   效率   config   jar   斜杠   

Java之ClassPath

大家剛開始寫Java代碼的時候,如果使用Eclipse作為IDE,同時需要引用其他的類庫,一般會有如下操作

  1. 在工程中建立lib目錄
  2. 將jar包複製到lib目錄下
  3. 按右鍵選中jar,點擊Bulid Path,之後點擊Add to Bulid Path
  4. 最終我們可以在Referenced Libraries中看到我們添加的jar包

ClassPath

其實上述的操作都和ClassPath有關,那究竟什麼是ClassPathClassPath的作用是什嗎?

1. 什麼是ClassPath

CLASSPATH 包含了一個或多個目錄,它們作為一種特殊的“根”使用,從這裡展開對.class檔案的搜尋。從那個根開始,解譯器會尋找包名,並將每個點號(句點)替換成一個斜杠,從而產生從CLASSPATH 根開始的一個路徑名(所以package foo.bar.baz會變成foo\bar\baz或者foo/bar/baz;具體是正斜杠還是反斜線由作業系統決定)。隨後將它們串連到一起,成為CLASSPATH 內的各個條目(入口)。以後搜尋.class檔案時,就可從這些地方開始尋找與準備建立的類名對應的名字。

ClassPath,中文叫做類路徑,就是存放編譯好的.class的路徑。當你需要引用或者使用的類,不再目前的目錄下的時候,就需要將這些類添加到ClassPath中。

當我們第一次寫JavaHelloWorld的時候,我們建立HelloWorld.java檔案,並輸入以下內容

public class HelloWorld {    public static void main(String[] args) {        System.out.println("Hello World");    }}

在命令列中輸入以下命令,就可以在控制台看見輸出Hello World

javac HelloWorld.javajava HelloWorld

但是你如果想在在程式中引用Jar包,該怎麼做?
下面的例子中在,我們想在HelloWorld中引用Gson的jar包

import com.google.gson.Gson;public class HelloWorld {    public static void main(String[] args) {        Gson gson = new Gson();        System.out.println("Hello World");    }}

首先將肯定需要將jar包複製到當前路徑下,之後我們直接運行javac javac HelloWorld.java,但是運行報錯,說明之前的做法已經行不通了

我們改成輸入,就可以重新列印輸出Hello World

javac -cp .\gson-2.8.0.jar HelloWorld.javajava -cp .\gson-2.8.0.jar; HelloWorld

或者

javac -classpath .\gson-2.8.0.jar; HelloWorld.javajava -classpath .\gson-2.8.0.jar; HelloWorld

從上講,可見ClassPath可以用來指定我們的匯入的Jar包的資訊。

2. Eclipse工具中ClassPath

當然,在IDE工具不用這麼麻煩,只需要點幾個按鈕就可以了。
在Eclipse中,比如我們將gson包匯入的ClassPath中,編譯器會在工程目錄下的.classpath檔案中添加我們匯入的jar包資訊,之後在編譯啟動並執行時候,自動添加這些資訊。對比上面的收到編譯運行,IDE工具為我們做了非常多事情,來提高我們的效率。

3. Web工程下的ClassPath

在Eclipse中,沒有使用Maven的情況下,建立Dynamic Web Project,使用Spring架構,一般我們會在Web.xml做出如下配置

<!-- 配置啟動 Spring IOC 容器的 Listener -->    <!-- needed for ContextLoaderListener -->    <context-param>        <param-name>contextConfigLocation</param-name>        <param-value>classpath:applicationContext.xml</param-value>    </context-param>    <!-- Bootstraps the root web application context before servlet initialization -->    <listener>        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>    </listener>        <servlet>        <servlet-name>springDispatcherServlet</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        <init-param>            <param-name>contextConfigLocation</param-name>            <param-value>classpath:springmvc.xml</param-value>        </init-param>        <load-on-startup>1</load-on-startup>    </servlet>    <servlet-mapping>        <servlet-name>springDispatcherServlet</servlet-name>        <url-pattern>/</url-pattern>    </servlet-mapping>

我們就會看到classpath:applicationContext.xmlclasspath:springmvc.xml裡面出現了classpath,有人就會有疑問,放在src目錄的設定檔用classpath:怎麼可以讀取到

我們將Dynamic Web Project匯出成war包,並將尾碼修改成rar並解壓。我們可以發現放在src目錄下的設定檔和產生的.class檔案均存放在WEB-INF\classes目錄下。所以我們就可以在在classpath中讀取到設定檔

談談Java的classpath

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.