2010-06-26 42 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

相关问题