Ошибка запуска примеров учебника в JDBC: UnsupportedClassVersionError

Обо мне:

Я новичок в программировании и не совсем уверен, как работает Apache-Ant и что он делает


Цель:

Запустите примеры программ в руководстве javaconnector jcdb


Фон платформы:

Моя машина OSX 10.5.8 32-разрядная

"which java"дает"/usr/bin/java", который ссылается на"/System/Library/Frameworks/JavaVM.frameworks/Versions/A/Commands/java"

"which javac"дает"/usr/bin/javac", который ссылается на"/System/Library/Frameworks/JavaVM.frameworks/Versions/A/Commands/javac"

"echo $JAVA_HOME"дает пустую строку

Приложение Java Preferences в Приложениях / Утилитах перечисляет четыре версии Java: 1.6.0_26_b03-385 (64 бита), 1.5.0_30-b03 (32 бита), 1.5.0_30-b03 (64 бита), 1.4.2_22 (32 бита), В настоящее время проверены версии 1.6.0 и две версии 1.5.0.

ПРИМЕЧАНИЕ. Java 32 для 32-разрядной версии OSX 10.5.8 отсутствует.


Что я сделал:

Сначала я скачал разъем / J распаковал его, переместил в /usr/local/mysql-connector-java, установил его в соответствии с README.txt разделами 3.1 и 3.2, включая изменение CLASSPATH. У меня уже есть и использую mysql

Затем я получил двоичный дистрибутив ant для версии 1.8.4 и установил его в соответствии с руководством. Примечательно, что в руководстве говорится, что apache ant работает с Java 1.5. "ant -versionвернула правильную версию 1.8.4

Затем я скачал учебные файлы, разархивировал файл в каталог и изменил build.xml а также properties/mysql-build-properties.xml файл в соответствии с инструкциями учебника.

Наконец я собрал пакет и образцы, используяant jar"и создал базы данных, таблицы и заполненные таблицы с помощью"ant create-mysql_database"Я тоже побежал"ant setup"для хорошего mesure

Согласно учебному пособию, теперь я должен иметь возможность запускать примеры, поместив мою оболочку в каталог учебника и запустив "ant <<sample_name>>"Поэтому я попытался запустить образец, предложенный в руководстве"ant runct".

В середине этой процедуры я никогда не менял, какую Java я использовал в настройках Java в Приложениях / Утилитах; Я попробовал процедуру, используя 1.5.0_30 и 1.6.0_26, как описано ниже


Моя проблема:

После запускаant <<sample_name>>" (например "ant runct") Я получаю следующую ошибку:

Файл сборки: /Users/adam/Desktop/JDBCTutorial/build.xml

runct: [java] Исключение в потоке "main" java.lang.UnsupportedClassVersionError: com/oracle/tutorial/jdbc/JDBCTutorialUtilities: неподдерживаемая версия major.minor 51.0 [java] в java.lang.ClassLoader.defineClass1(собственный метод) ] в java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) [java] в java.lang.ClassLoader.defineClass(ClassLoader.java:615) [java] в java.security.SecureClassLoader.defineClass(SecureClassLoj:141) [java] на java.net.URLClassLoader.defineClass(URLClassLoader.java:283) [java] на java.net.URLClassLoader.access$000(URLClassLoader.java:58) [java] на java.net.URLClassLoader$1. выполнить (URLClassLoader.java:197) [java] в java.security.AccessController.doPrivileged(собственный метод) [java] в java.net.URLClassLoader.findClass(URLClassLoader.java:190) [java] в java.lang.ClassLoader.loadClass(ClassLoader.java:306) [java] в sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) [java] в java.lang.ClassLoader.loadClass(ClassLoader.java:247) [java] Джава Результат: 1

СТРОИТЬ УСПЕШНО Общее время: 1 секунда


Мои попытки самовосстановления:

Насколько я могу судить по поиску в Google, ошибка возникла из-за того, что файлы, которые я скачал для учебника, и которые я пытаюсь запускать, скомпилированы с Java, отличным от того, который я пытаюсь использовать для запуска файлов. Поэтому я попытался использовать версию 1.6.0, поместив ее в верхней части списка в Applications/Utilities/Java_Preferencesи подтверждая, что он используется с помощью "java -version", а затем выполнить описанную выше процедуру. Та же ошибка.

Я также попытался разархивировать учебник и изменить файлы.xml, как описано выше, но изменил $JAVA а также $JAVAC свойства в mysql-sample-properties.xml указать на файлы в /System/Library/Frameworks/JavaVM.framwork/Versions/1.5.0/Home/binт.е. версия, номер которой я знаю, в отличие от файлов в "/usr/bin", которые указывают на файлы в /System/Library/Frameworks/JavaVM.framwork/Versions/A/Home/bin, Я тогда перезапустилant jar","ant create-mysql_database" а также "ant setup"Из того, что я понимаю, следует перекомпилировать файлы.java, используя указанный мной компилятор (правильно?). Однако у меня возникла та же ошибка при запуске"ant runct"

Я также попробовал следующее, как с переустановкой $JAVA и $JAVAC в mysql-sample-properties.xml по умолчанию (i.e. /usr/bin/java and /usr/bin/javac) и без сброса. Я поставил $JAVA_HOME в моем профиле /System/Library/Frameworks/JavaVM.framwork/Versions/1.5.0/Home, проверил правильную java, используемую which java который возвратил вышеупомянутый путь и java -version который вернул 1.5.0_30 и перезапустилant jar","ant create-mysql_database" а также "ant setup". Когда я побежал"ant runct"Я получил ту же ошибку.

ПРИМЕЧАНИЕ. Похоже, что файлы.java в руководстве используют некоторые объекты / синтаксис, добавленные в Java 1.6.

Существенной проблемой является то, что я не знаю, какой Java Ant использует.


Дополнительный вопрос:

Почему "usr/bin/java(c)"указать на версию" А "?

Что такое Java версия A???

Как установить 64-разрядную версию Java на 32-разрядной машине? Это просто как-то эмулирует 64-битную машину? Если да, то работает ли он медленнее, чем 32-битные версии для некоторых задач?

Почему у меня есть 64-битная 1.5 Java?

Какой компилятор Java и Java использует муравей?

Когда я изменяю, какая Java находится вверху списка в Applications/Utilties/Java_Preferences, Я могу подтвердить, что машина использует правильную Java-версию по умолчанию, выполнив "java -version", и могу проверить путь к используемой Java-программе, выполнив команду "which java"Независимо от того, какая Java находится наверху списка, т.е. используется"which java"указывает на"usr/bin/java", который является ярлыком для"/System/Library/Frameworks/JavaVM.frameworks/Versions/A/Commands/java"; это то же самое, независимо от того, какая версия Java используется в соответствии с Applications/Utilities/Java_Preferences а также "java -version"; как машина использует разные версии Java, указывая на один и тот же каталог / файл??

1 ответ

Из руководства муравья:

Environment Variables

The wrapper scripts use the following environment variables (if set):

JAVACMD - full path of the Java executable. Use this to invoke a different JVM than JAVA_HOME/bin/java(.exe).

Так что вы должны иметь свой JAVA_HOME установить правильную Java > 1,5 JDK. Однако мне неясно, какой муравей сейчас использует, так как ваш JAVA_HOME не установлен. Вы должны удалить 64-битную версию Java, если вы работаете в 32-битной системе, я не думаю, что они могут работать.

Я не эксперт по OSX, поэтому меня также беспокоит полный путь вашего javaисполняемый файл, обычно это должно быть в bin папка, родитель которой тот, который вы должны установить для JAVA_HOME переменная окружения (как описано в руководстве по Ant). Вы можете искать в своей системе исполняемые файлы Java с find -name java -perm +x, может быть, вы можете найти чистую установку Java таким образом.

В противном случае одно из ваших решений - загрузить JDK с веб-сайта Oracle и распаковать его в папку, например /opt/java_xxx и использовать это как JAVA_HOME, Это то, что я сделал, чтобы иметь, например, Java 6 и 7 бок о бок в моей системе.

Другие вопросы по тегам