在JDBC中运行教程示例时出错:UnsupportedClassVersionError

时间:2012-07-21 23:30:27

标签: java jdbc ant compilation versions

关于我:

我是一名新手程序员,并不确定Apache-Ant的工作原理及其作用


目标:

运行javaconnector jcdb tutorial

中的示例程序

平台背景:

我的机器是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"给出一个空行

Applications / Utilities中的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版本。

注意:32位OSX 10.5.8没有Java 1.6


我做了什么:

首先我下载connector/j解压缩它,将其移至/usr/local/mysql-connector-java,按照README.txt第3.1和3.2节安装它,包括修改CLASSPATH。我已经拥有并使用了mysql

接下来,我获得了版本1.8.4的ant二进制distribution并根据manual安装了它。值得注意的是,手册中指出apache ant适用于Java 1.5。 " ant -version"返回正确的版本,1.8.4

然后我下载了tutorial files,将文件解压缩到一个目录中,并根据tutorial's instructions修改了build.xmlproperties/mysql-build-properties.xml文件。

最后,我使用" ant jar"编写了包和样本,并使用" ant create-mysql_database"创建了数据库,表格和填充表格。我也跑了" ant setup"为了良好的测量

根据教程,我现在应该能够通过将我的shell放在教程目录并运行&#34; ant <<sample_name>>&#34;来运行示例。 。因此,我尝试运行教程建议的示例,&#34; ant runct&#34;。

在这个过程的中间,我从来没有改变过我在Application / Utilities的Java Preferences中使用的Java;我确实尝试了使用1.5.0_30和1.6.0_26的程序,如下所述


我的问题:

运行&#34; ant <<sample_name>>&#34; (例如&#34; ant runct&#34;),我收到以下错误:

  

Buildfile:/Users/adam/Desktop/JDBCTutorial/build.xml

     

runct:        [java]线程中的异常&#34; main&#34;因为java.lang.UnsupportedClassVersionError:   com / oracle / tutorial / jdbc / JDBCTutorialUtilities:不支持   major.minor版本51.0        [java] at java.lang.ClassLoader.defineClass1(Native Method)        [java] java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)        [java] java.lang.ClassLoader.defineClass(ClassLoader.java:615)        [java] java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)        [java] at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)        [java] at java.net.URLClassLoader.access $ 000(URLClassLoader.java:58)        [java] at java.net.URLClassLoader $ 1.run(URLClassLoader.java:197)        [java] java.security.AccessController.doPrivileged(Native Method)        [java] at java.net.URLClassLoader.findClass(URLClassLoader.java:190)        [java] java.lang.ClassLoader.loadClass(ClassLoader.java:306)        [java] at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:301)        [java] java.lang.ClassLoader.loadClass(ClassLoader.java:247)        [java] Java结果:1

     

建立成功总时间:1秒


我尝试自我纠正:

据我在google搜索中可以看出,错误已经出现,因为我为本教程下载的文件正在尝试运行,而不是我试图用来运行文件的java以外的java编译。因此,我尝试使用1.6.0版本,将其放在Applications/Utilities/Java_Preferences列表的顶部,并使用&#34; java -version&#34;确认它正在使用,然后执行上述程序。同样的错误。

我还尝试重新解压缩教程并修改与上述相同的.xml文件,但更改了$JAVA中的$JAVACmysql-sample-properties.xml属性以指向{{1}中的文件我所知道的版本,而不是&#34; /System/Library/Frameworks/JavaVM.framwork/Versions/1.5.0/Home/bin&#34;中的文件,它指向/usr/bin中的文件。然后我重新开始了#34; /System/Library/Frameworks/JavaVM.framwork/Versions/A/Home/bin&#34;,&#34; ant jar&#34;和&#34; ant create-mysql_database&#34 ;;根据我的理解,这应该使用我指定的编译器重新编译.java文件(正确吗?)。但是,当我运行&#34; ant setup&#34;

时,我遇到了同样的错误

我还尝试了以下方法,将{JAVA和$ JAVAC在ant runct中重新设置为默认值(mysql-sample-properties.xml),并且不重置。我在我的.profile中将i.e. /usr/bin/java and /usr/bin/javac设置为$JAVA_HOME,通过运行返回上述路径的/System/Library/Frameworks/JavaVM.framwork/Versions/1.5.0/Home和返回1.5.0_30的which java来测试正确的java,并重新使用-ran&#34; java -version&#34;,&#34; ant jar&#34;和&#34; ant create-mysql_database&#34;。当我跑#34; ant setup&#34;我得到了同样的错误。

注意:教程中的.java文件似乎使用Java 1.6中添加的一些对象/语法

一个重要的问题是我不知道哪个Java Ant正在使用。


其他问题:

为什么&#34; ant runct&#34;指向版本&#34; A&#34;?

什么是Java版本A ???

如何在32位计算机上安装64位Java?它只是以某种方式模拟64位机器吗?如果是这样,某些任务的运行速度是否比32位版本慢?

为什么我有64位1.5 Java?

哪个Java编译器和Java可以使用?

当我在usr/bin/java(c)中更改哪个Java位于列表顶部时,我可以通过执行&#34; java -version&#34;来确认机器正在使用正确的默认Java,并且可以检查通过做&#34; Applications/Utilties/Java_Preferences&#34;来使用Java的路径。无论哪个Java位于列表顶部即使用,&#34; which java&#34;指向&#34; which java&#34;,这是&#34; usr/bin/java&#34;的快捷方式;无论根据/System/Library/Frameworks/JavaVM.frameworks/Versions/A/Commands/java和&#34; Applications/Utilities/Java_Preferences&#34;使用哪个版本的Java,都是一样的。如何在指向同一目录/文件时使用不同版本的Java?

1 个答案:

答案 0 :(得分:0)

来自ant manual

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&gt; 1.5 JDK。但是我不清楚当前使用哪一个Ant,因为你的JAVA_HOME没有设置。如果您使用的是32位系统,则应该卸载64位版本的Java。我认为它们无法工作。

我不是OSX专家,所以我也对java可执行文件的完整路径感到困扰,通常它应该在bin文件夹中,其父项是您应该为其设置的文件夹JAVA_HOME环境变量(如Ant手册中所述)。您可以使用find -name java -perm +x在系统上搜索java可执行文件,也许您可​​以通过这种方式找到干净的java安装。

否则,您的解决方案之一是从oracle网站下载JDK,将其解压缩到/opt/java_xxx这样的文件夹中,并将其用作JAVA_HOME。这就是我在我的系统上并行实现的java 6和7。