无法加载类路径上的jar文件

时间:2014-01-10 18:27:35

标签: java ant jar cmd executable-jar

我试图通过执行
java -jar myJarFile.jar arg1 来运行我的jar文件,但它会为我的类文件中引用的类文件抛出ClassNotFoundException !。仅供参考,这些类文件存在于我放置在类路径上的一些外部jar中,方法是将env CLASSPATH变量设置为指向放置所有外部jar的目录。我的MANIFEST.MF看起来像是 Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.1
Created-By: 20.14-b01 (Sun Microsystems Inc.)
Main-Class: com.abc.test.FileGenerator
BuildDate: 01/10/2014 12:52:36
Class-Path: C:\libraries\commons-beanutils-1.8.3.jar C:\libraries\commons-collections.jar
C:\libraries\commons-discovery-0.2.jar C:\libraries\commons-lang-2.5.jar
C:\libraries\commons-logging-1.1.1.jar C:\libraries\commons-logging-1.0.4.jar

我的主要课程在我的jar中可用,我正在运行我的jar通过像ant文件夹这样的ant脚本创建的地方。我甚至改变了相对路径的绝对路径。它仍然抛出相同的错误。这是我的罐子结构 -
myFile.jar
|- com
| |
| abc
| |
| test
| |-package1
| |-package2
| |-FileGenerator.class
|
|-META-INF
| |- MANIFEST.MF

请帮助我。 提前谢谢!

3 个答案:

答案 0 :(得分:1)

您需要在CLASSPATH中设置所有jar文件的路径,只有一个目录才会导致jvm查找包从该目录开始而不是.class个文件的.jar个文件。

所以设置你的类路径就像这样(windows):

set CLASSPATH=%CLASSPATH%;C:\path\to\libs\somelib1.jar;path2\to\libs\somelib2.jar

等等。

然后你必须像这样运行你的程序:

java your.main.Klass arg1

或者,您可以在清单中添加Calss-path条目,并将所有依赖项放入其中:

Class-Path: libs/somelib1.jar libs/somelib3.jar

然后您可以使用-jar选项

运行它
java -jar myJarFile.jar arg1

答案 1 :(得分:1)

请在清单文件中添加外部jar的类路径,如

Class-Path: abc.jar def.jar folder/ghi.jar

然后运行您的命令java -jar myJarFile.jar arg1

答案 2 :(得分:0)

使用-jar告诉JVM忽略任何其他类路径设置(包括CLASSPATH和-cp)。此时您必须在清单文件中提供类路径。