2011-06-30 87 views
0

我得到以下異常跟蹤的運行ant package的結果(這是應該建立一個JBoss .ear包):調試螞蟻UnsupportedClassVersionError

$ ant package 
Buildfile: /usr/local/src/appname/build.xml 

init: 
    [echo] Classpath = ${java.classpath} 

build: 

package: 

BUILD FAILED 
/usr/local/src/appname/build.xml:369: java.lang.UnsupportedClassVersionError: Bad version number in .class file 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:621) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:56) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:195) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252) 
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) 
    at org.apache.tools.ant.util.depend.bcel.AncestorAnalyzer.<init>(AncestorAnalyzer.java:45) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:501) 
    at java.lang.Class.newInstance0(Class.java:350) 
    at java.lang.Class.newInstance(Class.java:303) 
    at org.apache.tools.ant.taskdefs.optional.ejb.GenericDeploymentTool.createAnalyzer(GenericDeploymentTool.java:281) 
    at org.apache.tools.ant.taskdefs.optional.ejb.GenericDeploymentTool.configure(GenericDeploymentTool.java:308) 
    at org.apache.tools.ant.taskdefs.optional.ejb.EjbJar.execute(EjbJar.java:582) 
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291) 
    at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:592) 
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
    at org.apache.tools.ant.Task.perform(Task.java:348) 
    at org.apache.tools.ant.Target.execute(Target.java:390) 
    at org.apache.tools.ant.Target.performTasks(Target.java:411) 
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1360) 
    at org.apache.tools.ant.Project.executeTarget(Project.java:1329) 
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 
    at org.apache.tools.ant.Project.executeTargets(Project.java:1212) 
    at org.apache.tools.ant.Main.runBuild(Main.java:801) 
    at org.apache.tools.ant.Main.startAnt(Main.java:218) 
    at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280) 
    at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109) 

Total time: 0 seconds 

有沒有辦法找出這正是它發生此異常時試圖加載的類文件?

我試過用ant -vant -debug來運行,但是這並沒有增加任何關於該問題的有價值的信息。

人們可以看到,ant build完成W/O錯誤(也ant clean作品。)

我明白的東西在我的設置打破,但明知有問題的類文件的名稱將是很大的幫助,以固定建立。

螞蟻和Java/javac的版本:

$ ant -version 
Apache Ant version 1.8.0 compiled on March 11 2010 

$ java -version 
java version "1.5.0_22" 
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_22-b03) 
Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_22-b03, mixed mode) 

$ javac -version 
javac 1.5.0_22 

OS版本:

$ lsb_release -a 
No LSB modules are available. 
Distributor ID: Debian 
Description: Debian GNU/Linux 6.0.2 (squeeze) 
Release: 6.0.2 
Codename: squeeze 

的JBoss安裝到/opt/jboss-4.2.3.GA

任何指針?

回答

0

根據Javadoc文檔java.lang.UnsupportedClassVersionError這個類的觀點是:

當Java虛擬機 試圖讀取一個類文件,並 確定該文件的主要和次要 版本號都扔不支持 。

這告訴我,有一類是不受支持的版本(通常看這是爲「更高版本」比你的螞蟻此刻正在使用。

所以......那個幸福說,看到你的Ant腳本看起來像試圖用EJB存根生成或類似的東西來做某些事情,這讓我想知道你正在嘗試使用哪種版本的Java EE,以及你正在使用的JBoss的版本。找出(比如EE 6不是Java SE 5)以及JRE JBoss使用的是什麼,如果你使用的任何jar包的級別高於1.5 build 22(即使它是1.5 build 23),那麼你可能會遇到這個錯誤。確保你的所有罐子(甚至是第三方罐子和lib狂熱和你用來生成Java EE應用程序的東西)都在1.5版本22或更低。這應該有助於緩解這個問題。如果您不確定jar的版本,您可以使用Winzip「打開」它並查看其MANAFEST.MF文件。

0

的問題是,ant從Debian的回購安裝,而java包的其餘部分:如JDK,JRE的JBoss等來自其它供應商(太陽/ Oracle的,阿帕奇等)

我已經刪除了Debian發行的ant並將其替換爲Apache的最新二進制文件。這解決了我的問題。

0

我遇到了同樣的問題。 我發現這個解決方案在ant腳本中。 它在編譯類的ant腳本里面我指定了build.target參數。例如:

<target name="compile"><javac compiler="javac1.5" target="1.5" ....></target>