由于运行ant package
(这应该创建一个JBoss .ear
包(,我得到了以下异常跟踪:
$ 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 -v
和ant -debug
运行,但这并没有添加任何有关该问题的有价值的信息。
可以看出,ant build
完成了无错误的(ant clean
也工作。(
我知道我的设置中出现了一些问题,但知道有问题的类文件名将对修复设置有很大帮助。
Ant和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
操作系统版本:
$ 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
。
有指针吗?
根据java.lang.UnsupportedClassVersionError
的Javadocs,这个类的要点是:
Java虚拟机时抛出尝试读取类文件,并且确定主要和次要文件中的版本号不是支持。
这告诉我有一个类的版本不受支持(通常读作"更高版本",而不是Ant当前使用的版本(
所以。。。话虽如此,看到您的Ant脚本看起来像是在尝试使用EJB存根生成之类的东西,我不禁想知道您正在尝试使用哪个版本的Java EE,以及您正在使用什么版本的JBoss。了解一下(就像EE6不是JavaSE5一样(以及JRE JBoss正在使用什么。如果您使用的任何jar包的级别都高于1.5 build 22(即使是1.5 build 23(,那么您可能会遇到此错误。确保你所有的jar(甚至是第三方jar和库,以及你用来生成Java EE应用程序的其他东西(都是1.5版本22或更低版本。这应该有助于缓解问题。如果你不确定一个jar的版本,你可以使用Winzip"打开"它,然后查看它的MANAFEST。MF文件。
问题是ant
是从Debian repo安装的,而其他java包:如jdk、jre、jboss等,来自其他供应商(Sun/Oracle、Apache等(
我已经删除了Debian附带的ant,并用Apache的最新二进制文件取而代之。这解决了我的问题。
我也遇到过同样的问题。我发现解决这个问题的办法就在蚂蚁的剧本里。在编译类的ant脚本中,我指定了build.target参数。示例:
<target name="compile"><javac compiler="javac1.5" target="1.5" ....></target>