我试图通过执行
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
请帮助我。
提前谢谢!
答案 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)。此时您必须在清单文件中提供类路径。