2011-03-25 132 views
0

我的意圖是給一個批處理文件,它執行一個Java應用程序/工具的jar到不懂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並執行其他操作。

回答

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