2010-06-26 43 views
1

我對運行java程序的過程感到困惑,也許你可以提供幫助。雖然提供了jar文件,但未找到java類

我有幾個.java文件在~/working_dir/org/project/有主要功能,我想打包它們在一個罐子裏運行它們。我做的:

cd ~/working_dir/org/projectname 
javac -classpath $CLASSPATH *.java 
cd ~/working_dir/ 
jar cf myjar.jar org/ 

然後嘗試做運行在罐子的一類: java -cp myjar.jar org.project.SomeClass

,並得到

Exception in thread "main" java.lang.NoClassDefFoundError: org/project/SomeClass 
Could not find the main class: org.project.SomeClass 

我該怎麼辦錯了嗎?這些類沒有任何錯誤編譯,並且jar tf myjar.jar表明它們確實存在。據我所知,我不需要創建一個Manifest文件,因爲我提供了我希望在運行時運行main函數的類 - 或者我在這裏錯了嗎?

非常感謝!

+0

貴org.project.SomeClass.java文件有'包org.project;在頂部'聲明? – nos 2010-06-26 20:21:00

+0

嘗試列出'jar tf myjar.jar'的輸出。對於org.project。SomeClass被發現,org/project/SomeClass.class條目必須存在(具有這個名字) – 2010-06-26 21:00:02

+0

是的,它有一個'package org.project;'語句和'jar tf myjar.jar'顯示它爲org /項目/ SomeClass – 2010-06-27 10:11:30

回答

0

如果爆炸罐子組織/項目/ SomeClass的是您當前的工作目錄下:

/ <- you are here 
+---/org 
    | 
    +-----/project 
      | 
      +--------SomeClass.class 

試試java命令。 org.project.SomeClass代替

0

首先,請注意,如果你只是做

javac org/project/SomeClass.java 

類文件最終會旁邊的java文件,這使得它棘手的僅包括的.class檔案在罐子裏。我建議你使用-d選項來指定目標目錄:

javac -d bin org/project/SomeClass.java 

看一看下面的bash會話的細節,以得到它的工作:

源目錄的列表:

[email protected]:/working_dir/src$ ls -R 
.: 
org 

./org: 
projectname 

./org/projectname: 
SomeClass.java 

的SomeClass.java文件:

[email protected]:/working_dir/src$ cat org/projectname/SomeClass.java 
package org.project; 

public class SomeClass { 
    public static void main(String[] args) { 
     System.out.println("Hello World"); 
    } 
} 

編譯它(與目標目錄../bin)

[email protected]:/working_dir/src$ javac org/projectname/SomeClass.java -d ../bin 

列表的結果,並確保你有正確的目錄:

[email protected]:/working_dir/src$ cd ../bin/ 
[email protected]:/working_dir/bin$ ls -R 
.: 
org 

./org: 
project 

./org/project: 
SomeClass.class 

創建jar文件:

[email protected]:/working_dir/bin$ jar cf myjar.jar org 

確保你得到的目錄是正確的,並沒有意外地包含「bin」目錄:

[email protected]:/working_dir/bin$ jar tf myjar.jar 
META-INF/ 
META-INF/MANIFEST.MF 
org/ 
org/project/ 
org/project/SomeClass.class 

啓動的主要方法:

[email protected]:/working_dir/bin$ java -cp myjar.jar org.project.SomeClass 
Hello World 

[email protected]:/working_dir/bin$ 
+0

感謝您的詳細說明。這幾乎是我以前做過的事情(除了沒有單獨的bin /文件夾),但這一次它的工作 - 我一定是第一次犯了一個小小的錯誤。 – 2010-06-27 13:07:19

相關問題