2012-07-21 100 views
3

关于我:错误JDBC运行教程样本:UnsupportedClassVersionError

我是一个较新的程序员,真的不知道它是如何Apache的蚂蚁可行,什么不可行


目标:

运行在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“给出了一个空行

Java应用程序中的应用程序/实用程序列出了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 1.6的32位OSX 10.5.8


我所做的:

首先我下载解压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 instructionsbuild.xmlproperties/mysql-build-properties.xml文件。

最后,我使用“ant jar”遵守包装和样品,并使用“ant create-mysql_database”创建了数据库,表格和填充表格。我也运行“ant setup”以获得良好的结果

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

在此过程中,我从未更改过在应用程序/实用程序中的Java首选项中使用的Java;我曾尝试使用1.5.0_30和1.6的程序。0_26如下


我的问题描述:

运行 “ant <<sample_name>>”(例如 “ant runct”)后,我收到以下错误:

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

runct: [java] Exception in thread "main" java.lang.UnsupportedClassVersionError: com/oracle/tutorial/jdbc/JDBCTutorialUtilities : Unsupported major.minor version 51.0 [java] at java.lang.ClassLoader.defineClass1(Native Method) [java] at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) [java] at java.lang.ClassLoader.defineClass(ClassLoader.java:615) [java] at 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] at java.security.AccessController.doPrivileged(Native Method) [java] at java.net.URLClassLoader.findClass(URLClassLoader.java:190) [java] at java.lang.ClassLoader.loadClass(ClassLoader.java:306) [java] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) [java] at java.lang.ClassLoader.loadClass(ClassLoader.java:247) [java] Java Result: 1

BUILD SUCCESSFUL Total time: 1 second


我的自我矫正尝试:

据我可以告诉从谷歌搜索,错误已经出现,因为我下载的教程,并试图运行的地方编译与我试图用来运行文件的Java编译的文件。因此,我试着使用1.6.0版本,将它放在Applications/Utilities/Java_Preferences的列表顶部,并使用“java -version”确认它正在使用,然后执行上述过程。同样的错误。

我也试过重新解压教程和修改.xml文件和上面一样,但在mysql-sample-properties.xml改变了$JAVA$JAVAC性质的文件/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),且无需重新设置。我在.profile文件设置$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蚂蚁是用添加了一些对象/语法。


其他问题:

为什么 “usr/bin/java(c)” 点 “A” 型?

什么是Java版本A ???

如何在我的32位机器上安装64位Java?它只是模拟一个64位机器?如果是这样,对于某些任务,它的运行速度是否低于32位版本?

为什么我有64位1.5 Java?

哪个Java编译器和Java不能使用?

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

回答

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> 1.5 JDK。但是由于你的JAVA_HOME未设置,所以目前我不清楚哪一个Ant正在使用。你应该卸载64位版本的Java,如果你在32位系统上,我认为他们不能工作。

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

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

+0

jolivier,谢谢你的回应,但我无法得到你的建议工作。将.profile中的$ JAVA_HOME设置为/System/Library/Frameworks/JavaVM.framwork/Versions/1.5.0/Home,选中正确的java被“which java”使用,重新解压缩Tutorial文件夹并修改.xml文件.xml特有的$ JAVA和$ JAVAC指向上面的目录。同样的问题。 “发现...”没有奏效;该命令不存在。无法下载JDK for mac,因为mac autoupdate会下载java,而且我的电脑表示它已经完全更新(对于32位osx 10.5.8也没有1.6)。如何在osx上卸载Java版本? – whearyou 2012-07-22 06:16:08

+0

对不起,因为我说我不知道​​OSX和你的问题安慰我拒绝它。 find是一个linux程序,其mac等价物很难找到(https://www.google.fr/search?q=find+osx+equivalent google找不到找到)。 运行蚂蚁之前,你确定“echo $ JAVA_HOME”打印正确的东西? – jolivier 2012-07-23 21:13:37

+0

对不起,如果我简短:/我最终放弃了教程,并使用蚂蚁文件。最后从网站教程中学习了JDBC。不管怎样,谢谢你 :) – whearyou 2012-08-04 06:53:00