日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

“java程序打成jar包 如何处理第三方jar包”

發布時間:2024/4/17 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 “java程序打成jar包 如何处理第三方jar包” 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

eclipse的export的 runnable jar file 導出的jar包的形式應該可以避免這個問題,直接想所依賴的jar里的class文件也一并打入jar包里了。


問題一:

現在有一j2se程序,依賴于jdk1.5、poi.jar、commons-lang.jar。?
打成jar包后,依賴于jdk的部分代碼是可以執行的。但是依賴于poi.jar、commons-lang.jar這兩個包的程序沒有辦法執行。?
我知道是因為在classPath中無法找到上述兩個包的緣故。但不希望每次都通過設置classpath的方式去運行這個jar程序。?
請問通過什么樣的打包辦法可以讓程序不用設置classpath而找到其所依賴的第三方jar包。謝謝javaeyer能予以指導!?

------------------------------------------------------------------------------------------------------------------?
問題補充:?
昨天嘗試了一個方法。但是這個方法不是我希望的。?
就是把poi.jar、commons-lang.jar整合到我的j2se的jar包中。這樣j2se就能很方便的找到其所依賴的class文件了。?
但是如果一個程序依賴10個,20個甚至更多的jar包的話。這樣做顯然不行。請問還有什么別的方法嗎??

得到了xiaolongfeixiang的友好知道:?

將第三方的jar包,加入到最后的jar包中。?

然后 修改 jar/META-INF/Mainfest 文件?

添加: Class-Path : 依賴jar包的路徑(相對于根路徑的路徑)?

因為手誤而在沒有詳細描述解決過程的時候變采納為了最佳方案,如對您的問題的解決帶來誤導請諒解。現描述可行步驟如下:?

1.通過 http://baike.baidu.com/view/1857179.htm?fr=ala0_1 了解到了mainfest.mf在jar包中的用途。?
2.沒有將第三方jar包放到最后的jar包中(嘗試這么做了,但是不行,所以推斷mainfest.mf中的Class-Path是不會去搜索自己jar包內部的東西的)。這樣我讓應用本身的jar和第三方jar同處一個目錄下。?
3.設定mainfest.mf:?
Manifest-Version: 1.0?
Class-Path: commons-lang.jar poi-2.5.1-final-20040804.jar?
Sealed: true?
Main-Class: ***.***?


問題二:

分別通過buildpath和lib倒入JAR包有什么不同????

===========================

我們可以通過java虛擬機的類加載器來理解。?
通過buildpath設置(或添加)程序使用jar包的classpath。?
Java虛擬機是根據Java ClassLoader(類加載器)決定如何,到那里去加載Class?
=================================================?
我們之所以把jar包放在classPath下,是因為存在ClassPath ClassLoader?
我們之所以可以不再ClassPath指定一些Jar包,但在Java程序中也能使用。?
那是因為有 Root ClassLoader(由C++編寫)?
我們之所以把Jar包放入webroot下的lib文件夾,并且可以在我們的程序中使用,那是容器實現了自己的ClassLoader。?
=============================?
所以說能不能加載Jar,加載哪里的Jar,是根據ClassLoader決定的。?
系統默認提供了3個ClassLoader?
Root ClassLoader -> ClassPathLoader -> ExtClassLoader(用于加載Java虛擬機ext目錄下的Jar)?
當然我們也可以編寫自己的ClassLoader,去加載特定環境下的Jar文件。?
=================================?
你可以去看看ClassLoader的相關介紹(想深入了解java虛擬機的話)。?
================================?
Eclipse只是一個開發工具,至于采用導入方式Copy Jar包,還是采用,手動Copy到webroot\lib目錄下,都是一樣的。?
因為如果你做的是WEB開發的話,不管你是采用Eclipse導入方式還是采用手動拷貝的方式,最后那些Jar都會被放在webroot/lib目錄下。?

當然利用Eclipse去導入Jar包也有一些要注意的地方,比如Eclipse下方會有英文的提示信息"是否將Jar包拷貝到WebRoot/Lib"下,如果沒有選中,?
你會驚訝的發現我的程序也能運行。。。?
這是因為Eclipse在這種情況下,自動將這個Jar包設置成ClassPath形式了。?

如果換一臺機器,你的程序就不能運行了。原因很簡單,?
因為不是所以機器都有ClassPath的。也更不會像Eclipse那樣,自動的為為程序在啟動前設置Jar的ClassPath。?

轉載于:https://www.cnblogs.com/biGpython/archive/2011/11/09/2242396.html

總結

以上是生活随笔為你收集整理的“java程序打成jar包 如何处理第三方jar包”的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。