Отладка муравья UnsupportedClassVersionError - PullRequest
0 голосов
/ 30 июня 2011

Я получаю следующую трассировку исключений в результате выполнения 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.

Есть указатели?

Ответы [ 3 ]

0 голосов
/ 01 июля 2011

Проблема заключалась в том, что ant был установлен из репозитория Debian, а остальные пакеты java: такие как jdk, jre, jboss и т. Д. От других поставщиков (Sun / Oracle, Apache и т.

Я удалил поставленный Debian муравей и заменил его последними двоичными файлами из Apache. Это решило мою проблему.

0 голосов
/ 12 октября 2013

Я столкнулся с той же проблемой. Я нашел решение, чтобы это было в сценарии муравья. Внутри скрипта ant, где он компилирует классы, я указал параметры build.target. Пример:

<target name="compile"><javac compiler="javac1.5" target="1.5" ....></target>
0 голосов
/ 30 июня 2011

Согласно Javadocs для java.lang.UnsupportedClassVersionError точка этого класса:

Брошенный, когда виртуальная машина Java пытается прочитать файл класса и определяет, что главные и младшие номера версий в файлене поддерживаются.

Это говорит мне о том, что существует класс с неподдерживаемой версией (обычно читается как «более высокая версия», чем тот, который использует ваш Ant в данный момент.

Итак ... сказанное и то, что ваш скрипт Ant выглядит так, как будто он пытается что-то сделать, возможно, с помощью создания заглушки EJB или тому подобного, заставляет меня задуматься, с какой версией Java EE вы пытаетесь работать, ис какой версией JBoss вы работаете. Узнайте это (например, EE 6 не Java SE 5) и что использует JRE JBoss. Если вы используете какие-либо jar-файлы для упаковки, которые находятся на уровне выше 1.5 build 22 (дажеесли это 1.5, сборка 23), то вы, вероятно, столкнетесь с этой ошибкой. Убедитесь, что все ваши jar-файлы (даже jar-файлы и библиотеки сторонних производителей и что вы не таковы)используется для создания приложения Java EE), все версии 1.5 build 22 или ниже.Это должно помочь облегчить проблему.Если вы не уверены в версии фляги, вы всегда можете «открыть» ее с помощью Winzip и посмотреть на файл MANAFEST.MF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...