3

关于我:

我是一个新程序员,不太确定 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" 给出一个空行

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 二进制发行版,并按照手册进行了安装。值得注意的是,该手册指出 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”为了好

根据教程,我现在应该能够通过将我的 shell 放在教程目录并运行 " 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:在 java.lang.ClassLoader.defineClass1(本机方法)[java] 中不受支持的 major.minor 版本 51.0 [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] 在 java.net.URLClassLoader.defineClass(URLClassLoader.java:283) [java] 在 java.net.URLClassLoader.access$000(URLClassLoader.java:58) [java] 在 java.net.URLClassLoader$1。在 java.security.AccessController.doPrivileged(Native Method) [java] 在 java.net.URLClassLoader 运行(URLClassLoader.java:197)[java]。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 结果:1

构建成功总时间:1秒


我的自我纠正尝试:

据我从谷歌搜索得知,出现错误是因为我为教程下载并尝试运行的文件是使用 java 编译的,而不是我试图用来运行文件的 java。因此,我尝试使用 1.6.0 版本,将其放在列表顶部Applications/Utilities/Java_Preferences,并使用“”确认它正在使用java -version,然后执行上述过程。同样的错误。

我还尝试重新解压缩教程并修改与上述相同的 .xml 文件,但将$JAVAand$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在我的 .profile 中设置为,通过运行返回上述路径并返回 1.5.0_30/System/Library/Frameworks/JavaVM.framwork/Versions/1.5.0/Home测试正确的 java 使用,然后重新运行“ ”、“ ”和“ ”。当我运行“ ”时,我得到了同样的错误。which javajava -versionant jarant create-mysql_databaseant setupant runct

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

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


附加问题:

为什么“ usr/bin/java(c)”指向版本“A”?

什么是Java版本A???

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

为什么我有 64 位 1.5 Java?

ant 使用哪个 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?

4

1 回答 1

0

来自蚂蚁手册

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。如果您在 32 位系统上,您应该卸载 64 位版本的 Java,我认为它们无法工作。

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

否则,您的解决方案之一是从 oracle 网站下载 JDK,将其解压缩到类似的文件夹中/opt/java_xxx并将其用作JAVA_HOME. 它是我所做的,例如在我的系统上并排安装 java 6 和 7。

于 2012-07-21T23:51:57.583 回答