批处理文件执行jar错误 - 找不到主类

时间:2011-03-25 02:59:54

标签: batch-file jar execution

我的目的是为不熟悉java的功能分析师团队提供一个执行jar应用程序/工具的批处理文件。当我执行批处理文件时,我得到以下错误。 任何帮助都非常感谢。

如何调试以查明问题是否在main()中负责加载log4j和配置文件?

Exception in thread "main" java.lang.NoClassDefFoundError: x.y.XYZClass           Caused by: java.lang.ClassNotFoundException: x.y.XYZClass        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: x.y.XYZClass
.  Program will exit.

这是我到目前为止所做的: 我使用Maven打包了一个具有以下目录结构的应用程序:

bin/run.bat
lib/application.jar and other jars that it depends on
config.properties
log4j.xml

jar清单文件内容:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: 
Build-Jdk: 1.6.0_20
Main-Class: x.y.XYZClass
Class-Path: vn.jar pn.jar

run.bat内容:

java -cp .;../lib/application.jar x.y.XYZClass -Dconfig.properties.name=../config.properties -Dlog4j.configuration=../log4j.xml   

我从bin文件夹的命令行执行run.bat。

XYZClass main()执行以下操作: 加载log4j.xml和config.properties并执行其他操作。

1 个答案:

答案 0 :(得分:0)

验证XYZClass是否存在于application.jar中的正确目录中。从bin目录中,运行命令:

jar tvf ../lib/application.jar

输出应该类似于:

META-INF/
META-INF/MANIFEST.MF
x/
x/y/
x/y/XYZClass.class

此外,由于您已经创建了一个可执行jar(通过在清单中指定Main-Class),因此您应该可以使用以下命令运行它:java -jar ..\lib\application.jar