後輩がこの現象にハマってしまい、自分も一緒にハマることに…。
ということで、さらに補足メモ。
この現象は、J2SE 1.5系を使用したときに起こる可能性がある。
で、これはJRunのせいではないので、TOMCATやWeblogicなどでもぶち当たる。
特徴としては、サーバを直に起動すると動作するが、Eclipse経由だとダメ。
次のようなエラーメッセージが出る時は注意して欲しい。
△ JavaVMが吐き出すエラーダイアログ
02/08 16:07:15 error Translator.CompilationFailedExceptionCompiler errors:java.lang.NoClassDefFoundError: com/sun/tools/javac/Main
Exception in thread "main"
[1]jrunx.compiler.DefaultCFE: Compiler errors:java.lang.NoClassDefFoundError: com/sun/tools/javac/Main
Exception in thread "main"
at jrunx.compiler.JavaCompiler.compile(JavaCompiler.java:141)
at jrunx.compiler.JavaCompiler.compile(JavaCompiler.java:100)
at jrun.jsp.Translator.compilePage(Translator.java:176)
at jrun.jsp.Translator.translate(Translator.java:254)
at jrun.jsp.Translator.translate(Translator.java:101)
at jrun.jsp.JSPEngine.translateJSP(JSPEngine.java:693)
at jrun.jsp.JSPServlet.translate(JSPServlet.java:125)
at jrun.jsp.JSPServlet.service(JSPServlet.java:113)
at jrun.servlet.FilterChain.doFilter(FilterChain.java:86)
at jrunx.util.DynamicClassLoaderFilter.doFilter(DynamicClassLoaderFilter.java:48)
at jrun.servlet.FilterChain.doFilter(FilterChain.java:94)
at jrun.servlet.FilterChain.service(FilterChain.java:101)
at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:91)
at jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42)
at jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:259)
at jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:541)
at jrun.servlet.http.WebService.invokeRunnable(WebService.java:172)
at jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428)
at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)
[0]javax.servlet.ServletException: Translator.CompilationFailedExceptionCompiler errors:java.lang.NoClassDefFoundError: com/sun/tools/javac/Main
■Eclipseの `JRE システムライブラリ` を修正する
・メニューバーより [ウインドウ]→[設定]
・ツリーから [Java]→[インストール済み JRE] を開く
△ Eclipseのシステムライブラリを確認。ちゃんとJDKの方を使ってますか?
ここで、システムライブラリのロケーションが「(JAVA)\jre1.5.x_xx」となっていたら原因確定。
`tools.jar`組み込まれていません。
・システムライブラリ(`jre1.5.x_xx`など)をクリックして「編集」ボタン
・JRE のホーム・ディレクトリーを「(JAVA)\jdk1.5.x_xx」に変更する
・OKボタンを押す
△ Eclipseのシステムライブラリを変更。ライブラリが増えたぞ。
読み込まれるシステムライブラリが増えたと思う。
JREとは`Java Runtime Environment`と呼ばれJava用のバイナリを実行するいわばエンドユーザ用。
開発用ではないのでこれにJSPをJavaに、Javaをclassバイナリにコンパイルする機能はない。
これで、Eclipseから起動した時も、JSPを表示することが出来るはずである。
■原因はEclipseのライブラリ違い
JSPのコンパイルには、`tools.jar`というライブラリファイルが必要。
でも、J2SE1.5系以降はJavaインストール時に「JDK」と「JRE」が別フォルダに配置されるようになっている。
ここで、Eclipseは、基本Javaエンジンとして、エンドユーザ向けの「JRE」を選択しているため、
この `tools.jar` が含まれていないという現象が起きている。
テーマ:プログラミング - ジャンル:コンピュータ
|