您的位置:首页 > 编程语言 > Java开发

製作java的jar包

2015-12-02 15:20 295 查看
說是java的jar包,其實只是爲了區別于android的jar包

把android項目里,需要製成jar包的那部份代碼摳出來以後,要將所有android的方法和類,使用java里類似的東西替代掉。基本上都是一些import的包,這些包多數可以從網上找到,找不到的,可以試著查看android包的源碼,如果是java的class,直接自己製作一份就行了,比如這次遇到的Pair類,直接自己製作一個就行了。

遇到一個本地庫文件libkaliumjni.so,這需要針對java重新編譯。也是從git上找到源碼,然後按照readme的指示編譯。在過程中發現,用於java的和用於android的,是使用了不同的編譯方法的。其中用於android,居然有四種:arm,arm7,mips,x86.
說起來用於java的其實也要區分32位和64位。

編好的libkaliumjni.so放在項目的根目錄下一份,src下一份,用到他的類包下面一份,之所以放這麼多份,其實。。。因為沒確認到底應該放哪裡,所以就。。。偶厚厚~

不過正式的做法應該是這樣的:在代碼里面調用的時候,使用System.loadLibrary("kaliumjni");
 這裡要注意名字喲,文件的名字是libkaliumjni.so,而調用的時候,只剩下了kaliumjni,簡直是。。。掐頭去尾。。。

然後將libkaliumjni.so拷貝到java.library.path的路徑下面。這個路徑其實包含了多個路徑,就像環境變量PATH一樣。要查看java.library.path包含的路徑,可以使用System.getProperty("java.library.path");
System.loadLibrary()方法會自動到java.library.path所包含的路徑下查找要load的library。這種自己將.so添加到正確位置的方法,才是代碼自動適配不同系統的標準做法。

在項目的根目錄下創建一個文件夾META-INF,其下創建一個文本MANIFEST.MF,添加內容

Manifest-Version: 1.0
Class-Path: libs/commons-codec-1.9.jar
libs/commons-logging-1.2.jar libs/httpclient-4.4.1.jar
libs/httpcore-4.4.1.jar libs/json.jar
Main-Class: mixun.platform.test.SDKTest

Class-Path後面跟這個項目要依賴的第三方jar,以空格隔開。這些第三方jar包的位置,要與未來這個jar包的位置平級。以libs/json.jar為例。假設這個jar打好為/xxx/xxx/a.jar
那麼第三方包就在/xxx/xxx/libs/json.jar
Main-Class後面跟要運行的main文件所在的類名,格式如上。
注意兩點:1.每行的冒號後面都是有空格的
     
     
   
 2.最後寫完了是要回車換行的,不然會報錯找不到Main-Class的

在eclipse的export里選擇JAR file打包吧。左邊窗口的libs目錄和右邊窗口的.classpath
 .project  so文件都是可以不要的。
JAR Manifest Specification要選擇Use existing manifest from
workspace項,點Browse..選擇剛才寫的MANIFEST.MF文件。

基本上,這樣打成的jar包就可以用了。記得要建好libs目錄。

如果要在終端調用jar包:java -jar xxx.jar 參數1 參數2
在終端包含第三方jar:java -classpath
/home/jinwh/workspace/PlatformSDK/libs/json.jar:/home/jinwh/workspace/PlatformSDK/libs/xxx.jar:.
mixun.platform.test.SDKTest 參數1 參數2
注意:這條命令必須在項目的bin目錄下執行
     
    jar包要絕對路徑指示
     
    多個jar包之間用:分隔
     
    最後一個jar包使用 :.
 結尾
     
    參數之間用空格隔開
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: