2019-06-14
關鍵字:Java 打包、jar 打包依賴
經常會有將 Java 工程打包成一個 jar 庫的形式以供其它工程調用的需求。而我們需要被打包成 jar 庫的工程中也難免會有需要依賴外部其它 jar 庫的情況。比如,我們自己開發一個通過 HTTP 訪問網絡資源的工程,這個工程需要解析 XML 文件,我們通常不會自己從零開發 XML 解析的功能,網絡上已經有很多現成的 XML 解析 jar 庫,直接拿來用就好了。在這種情況下,我們自己的 HTTP 訪問網絡資源工程在開發好以后,如果直接以普通的方式打包成 jar 庫,在其它工程中引用時,是會報錯的,會報一個 XML 解析相關的類找不到的異常。發生這種情況的原因就是我們的普通 jar 打包方式不會將工程中的庫依賴也打包進去。
那怎么解決呢? 其實很簡單。下面以 eclipse 中構建的工程為例進行講解。
step 1
在該工程右鍵,選擇導出工程。
step 2
在彈出的對話框中選擇 JAR file
step 3
再在彈出來的對話框中勾選一些信息,一定要注意哪些能勾哪些不能勾。按照下圖所示來即可
step 4
直接下一步
step 5
這一步需要注意,這里我們必須手動指定一個 MANIFEST.MF 文件,這份文件內部記載了我們的其它第三方 jar 庫的依賴路徑關系。
至於這個 MANIFEST.MF 文件的內容,則如下所示
Manifest-Version: 1.0
Class-Path: libs/jackson-annotations-2.9.9.jar libs/jackson-core-2.9.9.jar libs/jackson-databind-2.9.9.jar
重點內容就是上面的 Class-Path 項,這項的值填的就是你的外部庫的相對路徑,多個庫之間以空格隔開。
需要注意的是,這些第三方的 jar 庫也需要一起放到新的工程對應目錄下。就是說,這些外部的 jar 庫仍然不會一起打包進你自己的 jar 庫里去。在你后面要引用你自己打包的 jar 庫時,這些外部庫也需要一並放進對應目錄。
step 6
導出完成。
然后在使用方面。假設我們經過前面的步驟已經成功導出了一個名為 japi.jar 的庫文件。這個時候我們新建了一個工程 japi_client_test 工程,將這個 japi.jar 作為外部庫引入。
那么,正確的庫文件結構應該如下圖這樣
在前面的 MANIFEST.MF 中我們有填到 3 個外部庫,它的依賴路徑為
1、libs/jackson-annotations-2.9.9.jar
2、libs/jackson-core-2.9.9.jar
3、libs/jackson-databind-2.9.9.jar
所以在這里,也必須將這 3 個第三方的 jar 庫放入到一個 libs 目錄下,與我們的 japi.jar 具同等地位。
最后,還不能忘記要將它們都添加到新工程的外部依賴庫路徑中去,如下圖所示
如此一來,便大功告成了。