2012-06-07 30 views
0

我有一個外部庫(只有一個類文件,名爲org.vinay.dep.DependedClass)。它完全在 其軟件包目錄結構和目錄組織在桌面上。解決外部依賴性的類路徑

我有一個名爲a.jar的jar,它依賴於我的外部庫。

執行jar -tf a.jar,給出以下的輸出,

META-INF/     
META-INF/MANIFEST.MF  
com/  
com/os/   
com/os/hw/   
com/os/hw/HelloWorld.class  
com/os/hw/HwUtil.class 

我試圖以兩種方式

  1. java -classpath C:/Users/vinay/Desktop -jar a.jar與 MANIFEST.MF條目是

    清單運行jar -版: 1.0
    創建-者:1.6.0_05(太陽 微系統公司)
    主類:com.os.hw.HelloWorld

    ,並得到了NoClassDefFoundError的DependedClass

  2. java -jar a.jar後如下更改清單條目

    Manifest-Version:1.0
    創建者:1.6.0_05(太陽 微系統公司)
    主類:com.os.hw.HelloWorld
    類路徑:C:/用戶/維奈/桌面

    但這次扔的NoClassDefFoundError爲的HelloWorld 類本身

當我打包我的外部lib放到罐子和使用清單文件類路徑條目罐子命名works.Is有沒有辦法解決這個問題,而包裝外部lib放到罐子?

回答

1

我不認爲你可以結合-classpath和-jar。你可以這樣做,而不是像這樣:

java -cp C:/Users/vinay/Desktop;a.jar com.os.hw.HelloWorld 

這是假設a.jar文件是在當前文件夾(或您可以添加完整路徑a.jar文件以及)。

硬編碼您的清單中的路徑中的Class-Path條目在本地機器上是從來沒有正確的解決方案:)

+0

Yeah.It works.Thanks。但我們不能期望用戶知道什麼是主要的類是正確的嗎?有沒有辦法解決的依賴jar的外部類文件不存檔? –

+0

是的,您可以通過自定義類加載器加載更多類,例如通過創建一個相對於當前文件夾將文件加載到文件夾中的URLClassLoader。一個更好的方法可能是通過windows的批處理腳本和* nix的shell腳本運行應用程序,該腳本設置類路徑並正確調用main方法。 –