在系统上运行jar文件时出错

时间:2014-10-18 04:07:52

标签: java jar

我有一个类似以下的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                                                         

我不明白,是什么原因?请指导我?

2 个答案:

答案 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>