2013-10-29 42 views
1

執行罈子我有com.test.data包一個DataMerge的java文件,該文件導入以下軟件包:問題而使用命令行Ubuntu的

import org.apache.hadoop.conf.Configuration; 
import org.apache.hadoop.hbase.HBaseConfiguration; 
import org.apache.hadoop.hbase.client.*; 
import org.apache.hadoop.hbase.util.Bytes; 

現在,當我創建罐子(說Merge.jar)的文件DataMerge.java。它只包含DataMerge.class文件,沒有其他相關的jar文件。所以我的第一個問題是,我們可以以某種方式在Merge.jar中包含依賴文件嗎? 現在,我使用下面的命令的Ubuntu運行此Merge.jar:

java -cp /home/user/Desktop/test/*.jar -jar Merge.jar 

哪個我來閱讀計算器後實現一個有效的命令,並給出了Class not found錯誤。

現在,我嘗試使用以下命令

java -cp ./*.jar Merge.DataMerge (Merge is the jar file name and DataMerge is the main class) 

再次拋出以下異常。我猜這是因爲jar(commons-lang-2.5.jar)文件的名稱中的點(。)。

Exception in thread "main" java.lang.NoClassDefFoundError: //commons-lang-2/5/jar 
Caused by: java.lang.ClassNotFoundException: ..commons-lang-2.5.jar 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 
Could not find the main class: ./commons-lang-2.5.jar. Program will exit 

所以,我如何執行我的罐子被使用在命令行具有含像commons-lang-2.5.jar, slf4j-api-1.5.5.jar, commons-logging-1.1.1.jar名JAR依賴Ubuntu的日食窗口提出?

回答

1

假設你正在執行File-> Export-> Java-> Runnable JAR文件,你必須關心兩件事。

  1. 啓動配置:這應該指向您要啓動代碼執行的類。它應該定義一個公共靜態void main(String s [])函數。
  2. 圖書館處理:在你的情況下,你想選擇「將所需的圖書館打包到生成的JAR中」。

然後,你可以做 java -jar <your_jar>

+0

我做了你的建議。但是,我還有一些其他的軟件包存在於項目中。所以,那些不必要的軟件包也隨着相關的罐子一起進入最終的jar包。有什麼辦法,我只能使用選定的包的可執行jar? – Naresh

1

當使用-cp ./*.jar你必須確保通配符不被shell傳遞到Java擴展之前的 - 所以你要引用的類路徑像-cp "./*.jar"。然後一切都應該工作提供所有需要的罐子在當前目錄。