Fedora 17 を使用しています。Java 7 と互換性のない ant ビルド ファイルを使用してプロジェクトをコンパイルしようとしています。そのため、OpenJDK 6 をインストールすることにしました。JDK 6 は残念ながら yum リポジトリから削除されています。手動で簡単にインストールできます。JAVA_HOME 変数がなく、代わりに代替システムが使用されていることを知りました。alternatives --install
そのため、OpenJDK バイナリを (必要に応じて OSG から) ダウンロードし、コマンドを使用して java & javac & javaws をインストールしました。チェックして、それが成功したことjava --version
をjavac --version
証明しました。しかし、奇妙なことが起こったのは、ant が機能しなくなったということです。入力するant --execdebug
と、次のメッセージが表示されます。
exec "/usr/lib/jvm/openjdk-6.0.24/bin/java" -classpath "/usr/bin/build-classpath:
error: JVM_LIBDIR /usr/lib/jvm-exports/openjdk-6.0.24 does not exist or is not a
directory:/usr/bin/build-classpath: error: JVM_LIBDIR /usr/lib/jvm-exports/openjdk-6.0.24
does not exist or is not a directory:/usr/lib/jvm/openjdk-6.0.24/lib/tools.jar"
-Dant.home="/usr/share/ant" -Dant.library.dir="/usr/share/ant/lib"
org.apache.tools.ant.launch.Launcher -cp ""
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/tools/ant/launch/Launcher
Caused by: java.lang.ClassNotFoundException: org.apache.tools.ant.launch.Launcher
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: org.apache.tools.ant.launch.Launcher. Program will exit.
Java の場合と同様に、ANT_HOME 変数もありません。しかし、正常に動作している間にJava 6をインストールする前でさえ、ANT_HOMEはありませんでした。Ant は、既に PATH にある /usr/bin/ant の下にインストールされます。
更新:同様の質問qustion 1、question 2があることを知っています。しかし、どちらも私の問題を解決しませんでした。たとえば、ANT_HOME=/usr/bin を追加すると、JDK 7 でも ant が機能しないという状況が悪化します。代替システムに慣れていないため、Java 関連の代替を完全に削除し、JAVA_HOME を追加し、代わりに PATH を変更しました。繰り返しますが、java と javac は正常に動作し、java --version は正しいバージョンを返しますが、ant は同じエラーを返します。が示す--execdebug
ように、JVM_LIBDIR は正しい場所を指していません。値は java.conf ファイルに設定されていると思われるので、ここに貼り付けます (/usr/lib/jvm に JDK 6 & 7 をインストールしました)。
# System-wide Java configuration file -*- sh -*-
#
# JPackage Project <http://www.jpackage.org/>
# Location of jar files on the system
JAVA_LIBDIR=/usr/share/java
# Location of arch-specific jar files on the system
JNI_LIBDIR=/usr/lib64/java
# Location for noarch jar files using arch-specifics jar files
JAVAJNI_LIBDIR=/usr/share/java-jni
# Root of all JVM installations
JVM_ROOT=/usr/lib/jvm
# You can define a system-wide JVM root here if you're not using the
# default one.
#
# If you have the a base JRE package installed
# (e.g. java-1.6.0-openjdk):
#JAVA_HOME=$JVM_ROOT/jre
#
# If you have the a devel JDK package installed
# (e.g. java-1.6.0-openjdk-devel):
#JAVA_HOME=$JVM_ROOT/java-1.7.0-openjdk-1.7.0.9.x86_64
JAVA_HOME=$JVM_ROOT/openjdk-6.0.24
# Options to pass to the java interpreter
JAVACMD_OPTS=
java.conf の対応する行にコメントを付けてコメントを外すだけで、ant は 7 で正常に動作し、6 で失敗するようになります。antjava
シェルでコマンドの直前に JVM_LIBDIR をエコーuser/share/java
すると、java.conf に記載されているとおりに受信します。しかし、ant --execdebug
何か奇妙なものを返しました: JVM_LIBDIR /usr/lib/jvm-exports/openjdk-6.0.24
. それは何ですか、どうすれば修正できますか?
ここで問題がわからない場合、簡単に切り替えることができる、複数のバージョンの JDK をインストールする最も適切で安全な方法は何ですか?
どんな助けでも大歓迎です。