2011-10-25 4 views
1

私はUbuntu 11.04にJettyをインストールしようとしています。私はクラスパスの問題にぶつかっています。私はJDKを指すようにJAVA_HOMEを設定してstart.jarでJettyを起動します。UbuntuにJettyをインストールすると、com.sun.tools.javac.Mainがクラスパスにありません

/usr/share/jetty$ export JAVA_HOME=/usr/lib/jvm/java-6-sun 
/usr/share/jetty$ java -jar start.jar 

[...] 

com.sun.tools.javac.Main is not on the classpath. 
Perhaps JAVA_HOME does not point to the JDK. 
It is currently set to "/usr/lib/jvm/java-6-sun-1.6.0.26/jre" 

    at org.apache.tools.ant.taskdefs.compilers.CompilerAdapterFactory.getCompiler(CompilerAdapterFactory.java:127) 
... 

私が設定したJAVA_HOMEとjreを無視していることに注意してください。私もこれを試した:

java -classpath /usr/lib/jvm/java-6-sun/lib/tools.jar -jar start.jar 

同じエラーメッセージ。それは見つけることができません、com.sun.tools.javac.Main、それはtools.jarにあります。

私の.jspをコンパイルしようとしているときに、Jettyの邪魔になって、Antを使用しています。クラスローダーのトリックをやっていると思います。私のtools.jarファイルが見つかることができるこの気味悪なソフトウェアを秘密に伝えることは誰にも分かっていますか?

私はsun jdkとopenjdkで同じエラーが発生していることに注意してください。はい、JREだけでなくJDKもインストールしています。

apt-getがjavaをインストールする方法では、JDKの一部であるJavaバイナリがJREを指しています。このように:

ls -alph /usr/lib/jvm/java-6-sun/bin/java 
lrwxrwxrwx 1 root root 15 2011-10-25 18:48 /usr/lib/jvm/java-6-sun/bin/java -> ../jre/bin/java 

私は突堤、ジャスパーやAntは試してみて、Javaの実行可能ファイルの場所に基づいてtools.jarを見つけるためにいくつかの策略をしていることを推測している、そしてそれは、ここで失敗しているものです。

すべての手がかりは非常に高く評価されています。ありがとう!

+0

'java-6-sun'ディレクトリはリンクですか? (IMOでは、JDKを "jvm"と呼ぶのは変です。) –

+0

'export'の後に 'echo $ JAVA_HOME'を試して、それがどこを指しているのかを見て、JDKのhomeの下のbinディレクトリをエクスポートしてください:' export PATH = $ PATH:$ JAVA_HOME/bin'。 – ahmedyha

+0

ls -alph/usr/lib/jvm/java-6-sun lrwxrwxrwx 1 root root 19 2011-10-25 18:48/usr/lib/jvm/java-6-sun - > java-6-sun- 1.6.0.26/ – cbare

答えて

1

コメントはSOにちょっと読めなくしているので、ここであなたが尋ねた情報です:

$ lsb_release -s -c 
natty 

は、私はそうのような太陽のJDKをインストールしたのですが、同じエラーがOpenJDKので起こったことを覚えておいてください。私はかなり難しいものとしようと、どこにも持っていないので、

sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner" 
sudo apt-get update 
sudo apt-get -y install sun-java6-jdk 
sudo update-alternatives --config java 

私は、私が間違って軌道に乗っているでstart.jarを実行する環境を構成するかなり確信しています。

Jetty callのJasperは、JSPをコンパイルするAntタスクを呼び出します。 Antのorg/apache/tools/ant/taskdefs/Javac.javaのsourceでは、クラスパスの設定場所を確認できます。

私の問題は、おそらく環境変数を渡したり渡したりすることとは関係がありません。おそらく、そのチェーンの下にJavaシステムのプロパティを渡すことと関係しています。

醜いソリューション

だけで笑いのために、私は/usr/lib/jvm/java-6-sun/lib/tools.jarからの/ usr/libに/ JVM/Javaへのシンボリックリンクを作成-6-sun/jre/lib/ext。醜い、ハァッ?しかし、それは動作します。

+0

あなたが解決策を見つけたらうれしいです。それはハックなので、実際に何が起こっているのか把握したいと思うかもしれません。がんばろう。 –

1

新しいJAVA_HOME環境変数をエクスポートしていますが、新しいPATH環境変数もエクスポートしているとは限りません。おそらく、元のJavaホームの場所からjava実行可能ファイルを取得している可能性があります。 export PATH=$JAVA_HOME/bin:$PATHを含めるようにしてください。

+0

Danさん、ありがとうございました。同じエラーが発生しました。 – cbare

+0

'lsb_release -s -c'を実行すると何が言いますか? [JDKのためのUbuntuパッケージ](http://packages.ubuntu.com/search?keywords=jdk&searchon=names&suite=all§ion=all)を見ると、[Sun JDKはHardy用](http: /packages.ubuntu.com/hardy/i386/sun-java6-jdk/filelist)。 'java-6-sun-1.6.0.26' JDKはどうやってインストールされましたか? 'JAVA_HOME'と' PATH'をエクスポートした後、 'which java'、' java -version'、 'javac'と' javac -version'の出力はすべて正しく見えますか? –

+0

lsb_release -s -c - > natty – cbare

1

ツールを追加できます。JVMのブートクラスパスへのjar:

java -Xbootclasspath/p:/usr/lib/jvm/java-6-sun/lib/tools.jar -jar start.jar 
関連する問題