尽管提供了jar文件,但未找到java类
我对运行java程序的过程感到困惑,也许你能帮我 我在尽管提供了jar文件,但未找到java类,java,jar,Java,Jar,我对运行java程序的过程感到困惑,也许你能帮我 我在~/working\u dir/org/project/中有几个.java文件,它们具有主要功能,我想将它们打包到一个jar中运行它们。我有: cd ~/working_dir/org/projectname javac -classpath $CLASSPATH *.java cd ~/working_dir/ jar cf myjar.jar org/ 然后尝试运行jar中的一个类,方法是: java-cp myjar.jar org.
~/working\u dir/org/project/
中有几个.java文件,它们具有主要功能,我想将它们打包到一个jar中运行它们。我有:
cd ~/working_dir/org/projectname
javac -classpath $CLASSPATH *.java
cd ~/working_dir/
jar cf myjar.jar org/
然后尝试运行jar中的一个类,方法是:
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
表明它们确实存在。据我所知,我不需要创建清单文件,因为我提供了我希望在运行时从中运行主函数的类——或者我错了
非常感谢您的帮助 如果分解的jar org/project/SomeClass位于当前工作目录下:
/ <- you are here
+---/org
|
+-----/project
|
+--------SomeClass.class
/首先,请注意
javac org/project/SomeClass.java
类文件将在.java文件旁边结束,这使得在jar中只包含.class文件变得很棘手。我建议您使用-d
选项指定目标目录:
javac -d bin org/project/SomeClass.java
user@host:/working_dir/src$ ls -R
.:
org
./org:
projectname
./org/projectname:
SomeClass.java
user@host:/working_dir/bin$ jar tf myjar.jar
META-INF/
META-INF/MANIFEST.MF
org/
org/project/
org/project/SomeClass.class
查看以下bash会话以了解使其工作的详细信息:
源目录的列表:
javac -d bin org/project/SomeClass.java
user@host:/working_dir/src$ ls -R
.:
org
./org:
projectname
./org/projectname:
SomeClass.java
user@host:/working_dir/bin$ jar tf myjar.jar
META-INF/
META-INF/MANIFEST.MF
org/
org/project/
org/project/SomeClass.class
SomeClass.java文件:
user@host:/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)
列出结果并确保目录正确:
user@host:/working_dir/src$ cd ../bin/
user@host:/working_dir/bin$ ls -R
.:
org
./org:
project
./org/project:
SomeClass.class
创建jar文件:
user@host:/working_dir/bin$ jar cf myjar.jar org
确保目录正确,并且没有意外包含“bin”目录:
javac -d bin org/project/SomeClass.java
user@host:/working_dir/src$ ls -R
.:
org
./org:
projectname
./org/projectname:
SomeClass.java
user@host:/working_dir/bin$ jar tf myjar.jar
META-INF/
META-INF/MANIFEST.MF
org/
org/project/
org/project/SomeClass.class
启动主要方法:
user@host:/working_dir/bin$ java -cp myjar.jar org.project.SomeClass
Hello World
user@host:/working_dir/bin$
您的org.project.SomeClass.java文件是否有包org.project代码>语句在顶部?尝试列出jar tf myjar.jar的输出。要找到org.project.SomeClass,必须存在一个org/project/SomeClass.class条目(具有确切的名称)是的,它有一个包org.project代码>语句,jar tf myjar.jar
将其显示为org/project/someclasss感谢您的详细说明。这和我以前想的差不多(除了没有一个单独的bin/文件夹),但这次它起了作用——我第一次肯定犯了一些小但关键的错误。