我有一个类似以下的java文件:
import org.xBaseJ.DBF;
import org.xBaseJ.fields.CharField;
import org.xBaseJ.fields.NumField;
import org.apache.log4j.*;
public class Example2 {
public static void main(String args[]){
..........
}
}
我创建了这个'Example2.jar'文件,按照以下步骤运行:
1) javac Example2.java
2) java Example2
3) This will produce a .class file needed for the JAR file.
4) Next create a manifest file (saved using the extension .txt) using the text editor and input the following
Main-Class: Example2
or whatever your file's name is.
5) Next create the JAR file using this code:
jar cfe Example2.jar Example2 Example2.class
在第5步之后,我得到了一个名为'Example2.jar'的jar文件。我尝试使用以下命令运行jar文件:
java -jar HelloWorld.jar
但我收到以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/xBaseJ/DBF at Example2.main(Example2.java:14) Caused by: java.lang.ClassNotFoundException: org.xBaseJ.DBF at java.net.URLClassLoader$1.run(URLClassLoader.java:372) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:360) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 1 more
我不明白,是什么原因?请指导我?
答案 0 :(得分:2)
有一件事是,当你创建Jar时,首先看看这个清单,这对包括外部库有什么帮助。
http://docs.oracle.com/javase/tutorial/deployment/jar/appman.html
创建并赋予清单时,只需使用配置
运行该类http://docs.oracle.com/javase/tutorial/deployment/jar/modman.html
所以看到这两个链接。
看看这个例子。
运行你的java并获取类文件
javac Test.java
如果您正在使用其他外部库,那么请执行此操作。
javac -classpath xxx.jar Test.java
并查看清单配置并使用此类外部更改生成该文件。
menifest.txt
Main-Class: Test
Class-Path: xxx.jar xxxx.jar
然后你需要像这样制作jar文件。 运行此命令
jar cfm jarName.jar manifest.txt Test.class
因此我们完成了你可以在同一条路径中使用jarfile。
答案 1 :(得分:0)
您看到的错误是由于classpath不正确造成的。我假设在编译类时,你以某种方式提供了一个类路径(通过传递'-classpath'arg或通过设置'CLASSPATH'环境变量)。问题是编译类路径与运行时类路径是分开的。因此,您只需要确保在编译类时,类路径上的所有依赖项(最有可能是其他jar文件)也会在运行时添加到类路径中罐子。对于jar文件,这通常由adding a 'Class-Path'header to the manifest完成。
另一种方法是使用命令行arg或环境变量指定类路径,并在该类路径中包含Example2.jar文件,然后运行java Example2
(不带'-jar')。 / p>