Ubuntu 11.04サーバーディストリビューションで実行されているプロジェクトにSun-Java6-jdk
とSun-Java6-jre
(およびフォントなどの関連する他のJava6パッケージ)をインストールしました。私たちのプロジェクトは、実行中の実行可能ファイル内からプログラムによってJavadocを呼び出します。これを行うには、JREディストリビューションではなく、JDKディストリビューションの一部であるtools.jarファイルの場所を明らかにする必要があります。パッケージは/usr/lib/jvm/Java-6-Sun-1.6.0.26/
にインストールされ、2つの領域(JDK/JRE)の下にbinおよびその他のディレクトリがあり、さまざまな標準バイナリが提供されます。
Javaプログラムを実行するときは常に(Javaバイナリを介して)、内部のJava.home変数が、提供されたJava_HOME環境変数を上書きするようです。したがって、バイナリはそのバイナリのパスからそのJava.homeを導出します。jdkの下のJavaバイナリは、実際にはjreバージョンへのリンクです。したがって、どれを「実行」しても、常にjreバージョンを取得しているため、Java.homeディレクトリは/usr/lib/jvm/Java-6-Sun-1.6.0.26/jre
と定義されています。
そのため、実行中の実行可能ファイルはtools.jar
ファイルを見つけることができず、-cp /usr/lib/jvm/Java-6-Sun-1.6.0.26/jdk/lib/tools.jar
オプションを渡しても役に立ちません。 tools.jar
ファイルに正しくアクセスして、com.Sun.tools.javadoc.Main.execute
メソッドを正しく呼び出せるようにする方法を誰かに明かしてもらいたいと思っています。
実行例:
Java -cp /usr/lib/jvm/Java-6-Sun/lib/tools.jar -jar comtor.jar -sourcepath .
Exception in thread "main" Java.lang.NoClassDefFoundError: com/Sun/tools/javadoc/Main
at comtor.Comtor.main(Unknown Source)
Caused by: Java.lang.ClassNotFoundException: com.Sun.tools.javadoc.Main
at Java.net.URLClassLoader$1.run(URLClassLoader.Java:202)
at Java.security.AccessController.doPrivileged(Native Method)
at Java.net.URLClassLoader.findClass(URLClassLoader.Java:190)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:306)
at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:301)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:247)
... 1 more
まあ、それはハックですが、サードパーティのjarファイルを拡張機能としてインストールしているかのように、tools.jar
ファイルをjre/lib/ext
ディレクトリにコピーしてしまいました。これは不自然なアクションのようで、-cp
オプション(試行して失敗した)または環境変数(試行して失敗した)を介してコマンドラインで何かをする必要があります。