Jar包的正確運行方法

來源:互聯網
上載者:User

-jar參數運行應用時classpath的設定方法 

       你是否在使用java -jar參數運行打包好的jar應用程式的時候發現應用程式無法找到classpath下設定好的第三方類庫的內容?無論怎麼設定classpath參數都無濟於事,總是會報ClassNotFound的錯誤?那麼本篇文章可以協助你擺脫煩惱
      當用java -jar yourJarExe.jar來運行一個經過打包的應用程式的時候,你會發現如何設定-classpath參數應用程式都找不到相應的第三方類,報ClassNotFound錯誤。實際上這是由於當使用-jar參數啟動並執行時候,java VM會屏蔽所有的外部classpath,而只以本身yourJarExe.jar的內部class作為類的尋找範圍。

解決方案

一 BootStrap class擴充方案
      Java 命令列提供了如何擴充bootStrap 層級class的簡單方法:
            -Xbootclasspath:     完全取代基本核心的Java class 搜尋路徑.
                                   不常用,否則要重新寫所有Java 核心class
            -Xbootclasspath/a: 尾碼在核心class搜尋路徑後面.常用!!
            -Xbootclasspath/p: 首碼在核心class搜尋路徑前面.不常用,避免
                                   引起不必要的衝突.
文法如下:
 (分隔字元與classpath參數類似,unix使用:號,windows使用;號,這裡以unix為例)
 java -Xbootclasspath/a:/usrhome/thirdlib.jar: -jar yourJarExe.jar

二 extend class 擴充方案
      Java exten class 存放在{Java_home}\jre\lib\ext目錄下.當調用Java時,對擴充class路徑的搜尋是自動的.總會搜尋的.這樣,解決的方案就很簡單了,將所有要使用的第三方的jar包都複製到ext 目錄下.
      (自評:不推薦使用,自適應性很差!)

三 User class擴充方案
      當使用-jar執行可執行Jar包時,JVM將Jar包所在目錄設定為codebase目錄,所有的class搜尋都在這個目錄下開始.所以如果使用了其他第三方的jar包,一個比較可以接受的可配置方案,就是利用jar包的Manifest擴充機制.
步驟如下:
1.將需要的第三方的jar包,複製在同可執行jar所在的目錄或某個子目錄下. 比如:jar 包在 /usrhome/yourJarExe.jar 那麼你可以把所有jar包複製到/usrhome目錄下或/usrhome/lib 等類似的子目錄下.
2.修改Manifest 檔案
 在Manifest.mf檔案裡加入如下行
 Class-Path:classes12.jar lib/thirdlib.jar
 Class-Path 是可執行jar包運行依賴的關鍵詞.詳細內容可以參考:http://java.sun.com/docs/books/tutorial/ext/index.html

      以上三種方法推薦第一種,擴充性好,操作起來也最方便.
      另外編寫自己的ClassLoader,來動態載入class,是更加複雜和進階技術.限於篇幅,不贅述.有興趣瞭解可以去google一下custom classloader

      Java的安全機制隨不同的JDK版本有不同的變化,會影響很多核心CLASS,比如Thread,所以很多大型商業軟體,要求JDK的版本很嚴格.部分原因也在此.這也要求在發布自己編寫的應用時候,不管大小,都要說明開發與測試的JDK版本.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.