Tomcat - UnsupportedClassException - PullRequest
       7

Tomcat - UnsupportedClassException

2 голосов
/ 15 декабря 2009

У меня проблема с развертыванием скомпилированных классов в веб-приложении Tomcat: я развертываю класс, который должен вызываться из сервлета, но когда я запускаю приложение, оно не сообщает мне ServletException: Error allocating the servlet instance из-за 1002 *.

Tomcat использует Java 1.5.0_06, как сообщил менеджер. Мой класс был скомпилирован с использованием Java 1.6.0_14. Запуск javap на любом из уже существующих классов говорит мне о том, что «Major version 46, minor version 0» должен иметь начальную версию 1.2.0 и более недоступен для загрузки. Самый старый, который я могу найти, это 1.2.1_004, который даже не компилируется.

Нужно ли сопоставлять мою версию Java со средой Tomcat или с уже существующими классами? Перекомпиляция всего проекта с использованием более современной Java на данный момент для меня неосуществима, хотя я бы с удовольствием это сделал.

Ответы [ 4 ]

4 голосов
/ 15 декабря 2009

Это просто: вы скомпилировали свое приложение с компилятором Java более поздней версии, чем среда выполнения Java под Tomcat.

Обновление

Компилятор java, javac, поддерживает параметры

-source release
    Specifies the version of source code accepted. The following values for release are allowed:
    1.3     the compiler does not support assertions, generics, or other language features introduced after JDK 1.3.
    1.4     the compiler accepts code containing assertions, which were introduced in JDK 1.4.
    1.5     the compiler accepts code containing generics and other language features introduced in JDK 5. The compiler defaults to the version 5 behavior if the -source flag is not used.
    5   Synonym for 1.5

... и, что еще важнее,

-target version
    Generate class files that will work on VMs with the specified version. The default is to generate class files to be compatible with the JDK 5 VM. When the -source 1.4 or lower option is used, the default target is 1.4. The versions supported by javac are:
    1.1     Generate class files that will run on VMs in JDK 1.1 and later.
    1.2     Generate class files that will run on VMs in JDK 1.2 and later, but will not run on 1.1 VMs.
    1.3     Generate class files that will run on VMs in JDK 1.3 and later, but will not run on 1.1 or 1.2 VMs.
    1.4     Generate class files that will run on VMs in JDK 1.4 and later, but will not run on 1.1, 1.2 or 1.3 VMs.
    1.5     Generate class files that are compatible only with JDK 5 VMs.
    5   Synonym for 1.5

... который позволит вам скомпилировать код для определенной версии JVM.

Другими словами, вы можете продолжать использовать свой компилятор 1.6, просто добавьте в него эти опции, и вы можете заставить его генерировать код 1.5, который Tomcat сможет обрабатывать.

0 голосов
/ 15 декабря 2009

Недавно я получил ту же проблему UnsupportedClassVersionError. Основной причиной этого был не мой собственный скомпилированный код, а некоторые библиотеки, которые были необходимы, которые были скомпилированы с более новым JDK.

0 голосов
/ 15 декабря 2009

Вместо того, чтобы перекомпилировать ваш исходный код для обеспечения совместимости с 1.5, вы можете обновить JDK, который использует Tomcat, до 1.6.

Вы можете изменить это, установив переменную среды JAVA_HOME, чтобы она указала на установку Java 1.6.

0 голосов
/ 15 декабря 2009

Нужно ли сопоставлять мою версию Java со средой Tomcat или с уже существующими классами?

Вы должны убедиться, что ваш код скомпилирован с версией (меньше или равна), поддерживаемой используемой вами JVM; но нет, это не обязательно должна быть та же версия, из которой была построена база кода Tomcat - две базы кода могут быть независимыми друг от друга версией jvm, если они обе поддерживаются используемой вами jvm.

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