Ошибка запуска примеров учебника в 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 бок о бок в моей системе.