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" は空白行を与える

アプリケーション/ユーティリティの Java 設定アプリには、Java の 4 つのバージョンがリストされています: 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 と 2 つの 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_databaseant setup念のため" " も実行しました

チュートリアルによると、シェルをチュートリアル ディレクトリに配置して " 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] スレッド「メイン」での例外] 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] 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 結果: 1

BUILD SUCCESSFUL 合計時間: 1 秒


自己修正の試み:

グーグルでわかる限り、チュートリアル用にダウンロードしたファイルが、ファイルの実行に使用しようとしているもの以外の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/binant 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 のバージョンに関係なく同じjava -versionです。同じディレクトリ/ファイルを指しているときに、異なるバージョンの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 に設定する必要があります。ただし、設定されていないため、Antが現在使用しているものは不明ですJAVA_HOME。32 ビット システムを使用している場合は、64 ビット バージョンの Java をアンインストールする必要があります。動作しないと思います。

私は OSX の専門家ではないので、java実行可能ファイルのフル パスにも悩まされています。通常はbin、環境変数に設定する必要がある親のフォルダーにある必要がありJAVA_HOMEます (Ant のマニュアルで説明されています)。を使用して、システムで Java 実行可能ファイルを検索find -name java -perm +xできます。おそらく、この方法でクリーンな Java インストールを見つけることができます。

それ以外の場合、ここでの解決策の 1 つは、Oracle の Web サイトから JDK をダウンロードし、次のようなフォルダーに解凍して、それを .xml/opt/java_xxxとして使用することJAVA_HOMEです。たとえば、システムにJava 6と7を並べて配置するために私がしたことです。

于 2012-07-21T23:51:57.583 に答える