fjavac

2004/06/09 更新

ダウンロード

fjavac について



          fjavac  Ver.0.04  Copyright (C) 2001-2004  K.Takata


1.概要
     Forte for Java CE には fastjavac という高速 Java コンパイラが付属
    しています。fjavac は、この fastjavac をコマンドラインから利用しやす
    くするためのローダです。
     Ver.0.04 からは IBM の jikes にも対応しています。


2.動作環境
    ・Win9x DOS窓、Win2k コマンドプロンプトなど
    ・VC6.0 のランタイムライブラリ(MSVCRT.DLL)が必要
    ・Java2 SDK と、Forte for Java (CE) または jikes が必要


3.インストール方法

3.1. fastjavac を使う場合
     fjavac を使うためには、Java2 SDK と Forte for Java が必要ですので、
    まずそれらをインストールしておいてください。次に、適当なディレクトリ
    に fjavac.exe を移動させてから、fjavac.exe を一度実行してください。
    fjavac.exe を初めて起動すると、メッセージが表示されると同時に
    fjavac.exe があるディレクトリに fjavac.ini が作られます。内容は以下
    のようになっています。

        [fjavac]
        fastjavac=fastjavac.exe
        jikes=jikes.exe
        usejikes=0
        ;JDK=c:\j2sdk1.4

    上記の fastjavac.exe と書かれている部分を、実際に fastjavac.exe が存
    在する場所(フルパス)を示すように書き換えてください。例えば Forte
    for Java を e:\forte4j にインストールした場合は、以下のように書き換
    えてください。

        [fjavac]
        fastjavac=e:\forte4j\bin\fastjavac\fastjavac.exe

    あとは、fjavac.exe のあるディレクトリにパスを通すか、パスの通ったデ
    ィレクトリに fjavac.exe と fjavac.ini をコピーすればインストールは完
    了です。


3.2. jikes を使う場合
     まず Java2 SDK と jikes をインストールしておいてください。次に、適
    当なディレクトリに fjavac.exe を移動させてから、fjavac.exe を一度実
    行してください。fjavac.exe を初めて起動すると、メッセージが表示され
    ると同時に fjavac.exe があるディレクトリに fjavac.ini が作られます。
    (内容は 3.1. と同じ。)
     fjavac.ini の jikes.exe と書かれている部分を、実際に jikes.exe が
    存在する場所(フルパス)を示すように書き換えてください。ただし、
    jikes.exe がパスの通ったディレクトリにある場合は、書き換える必要はあ
    りません。
     次に、usejikes=0 となっている部分を usejikes=1 に書き換えてくださ
    い。最後に、fjavac.exe のあるディレクトリにパスを通すか、パスの通っ
    たディレクトリに fjavac.exe と fjavac.ini をコピーすればインストール
    は完了です。


4.使用方法
     Java の標準のコンパイラである javac と使い方はほとんど同じです。単
    に javac とタイプすべきところを fjavac とタイプすればよいだけです。
    例えば foo.java をコンパイルするには以下のようにしてください。

        > fjavac foo.java

    基本的に javac でコンパイルできるものは fjavac を使っても同じように
    コンパイルできるはずですが、まれに fjavac ではコンパイルできないもの
    もあります。(一太郎 Ark のソースの一部など。) その時は遅いのを我慢
    して javac を使ってください。(あるいは fjavac でも動くようにソース
    を書き換えましょう。)
     なお、コンパイル時のメッセージは javac と同じように標準エラー出力
    に出されますので Win9x では more コマンドを使って1ページずつ表示し
    たりすることはできません。more コマンドなどを使いたい場合は、拙作の
    RDERR(*1) を使って以下のように実行してください。

        > rderr -- fjavac foo.java | more

    (*1) http://homepage3.nifty.com/k-takata/mysoft/rderr.html



     fjavac は、Java2 SDK の場所をレジストリから読み込むようになってい
    ますが、何らかの理由で、レジストリに指定されている場所とは違う場所に
    ある Java2 SDK を使いたいときは、fjavac.ini 内で Java2 SDK の場所を
    指定してやる必要があります。例えば、複数のバージョンの Java2 SDK を
    インストールしていて、その中の特定のバージョンをコンパイルに利用した
    い場合などがこれに相当します。例えば e:\jdk1.3 にインストールしてい
    る Java2 SDK を fastjavac が読み込むようにしたい場合は、以下のように
    fjavac.ini を書き換えてください。

        [fjavac]
        fastjavac=e:\forte4j\bin\fastjavac\fastjavac.exe
        JDK=e:\jdk1.3

    補足)  Forte for Java CE 3.0 に付属の fastjavac (version 4.0,
           build #529) は、Java2 SDK 1.4 に対応していません。そのため
           Java2 SDK 1.4 を使いつつ、fastjavac ver.4.0 を使うためには、
           Java2 SDK 1.3 も同時にインストールしておく必要があります。し
           かし、単に 1.3 をインストールしただけではレジストリの内容によ
           っては fjavac は 1.4 の方を使おうとすることがあります。従って
           この場合、上記のように Java2 SDK として 1.3 の方を使うという
           ことを fjavac.ini に明記しておく必要があります。(これよりも
           新しい fastjavac (例:version 4.0, build #532) は、J2SDK 1.4
           にも対応していますので、この場合は fjavac.ini で J2SDK の場所
           を指定する必要はありません。)


5.動作原理

5.1. fastjavac
     fjavac は、以下のようにして fastjavac を呼び出しています。

        > %fastjavac% -jdk %jdkhome% [args]

    ・%fastjavac% の部分は fastjavac.exe のフルパスが入ります。この値は、
      fjavac と同じディレクトリにある fjavac.ini から読み込みます。
    ・%jdkhome% の部分は Java2 SDK のインストールされているディレクトリ
      が入ります。この値は、レジストリの
      HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\(Ver)\
      の JavaHome の値を読み込んでいます。(Ver) の部分には Java2 SDK の
      バージョン(1.4.2 など)が入ります。
    ・[args] の部分は fjavac を呼び出したときのコマンドライン引数がその
      まま入ります。

     やっていることはたったこれだけですので、%fastjavac% と %jdkhome%
    の値を固定してしまえば、fjavac はバッチファイルでも実現可能ですが
    (実際作者自身そのようにしていた)、実行ファイル形式にしたことでリダ
    イレクトが楽になる(下の例参照)という利点があります。また、別のバッ
    チファイルからそのまま(call を使わずに)呼び出せるという利点もあり
    ます。

    ・バッチファイルの場合
        > rderr -- command /c fjavac.bat foo.java | more

    ・実行ファイル形式の場合
        > rderr -- fjavac foo.java | more


5.1. jikes
     fjavac は、以下のようにして jikes を呼び出しています。

        > %jikes% -bootclasspath %jdkhome%\jre\lib\rt.jar [args]

    ・%jikes% の部分は jikes.exe のフルパスが入ります。この値は、fjavac
      と同じディレクトリにある fjavac.ini から読み込みます。
    ・%jdkhome% の部分は Java2 SDK のインストールされているディレクトリ
      が入ります。この値は、レジストリの
      HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\(Ver)\
      の JavaHome の値を読み込んでいます。(Ver) の部分には Java2 SDK の
      バージョン(1.4.2 など)が入ります。
    ・[args] の部分は fjavac を呼び出したときのコマンドライン引数がその
      まま入ります。


6.コラム「PC-98 の Win9x で Forte for Java が動作しない原因」
     PC-98 の Win9x 上では Forte for Java(以下 forte4j) が動作しませ
    ん。ここではその原因を探ってみます。
     まず、PC-98 の Win9x 上で普通にスタートメニューから forte4j を実行
    してみましょう。しばらく HDD にアクセスしたかと思うと、すぐに静かに
    なってしまいます。ここで Ctrl+Grph+Del を押してみると、Runide という
    プログラムが見つかります。Runide は forte4j の起動用のプログラムです。
    どうやら Runide がハングアップしてしまったようです。
     今度は DOS 窓を開いて、コマンドラインから \forte4j\bin\runide を実
    行してみましょう。するとどうでしょう。今度は途中でハングアップしたり
    せず、forte4j が起動しました。しかし、DOS 窓に大量の文字が表示された
    のが少し気になります。
     次は DOS 窓から \forte4j\bin\runide を実行した直後に、適当なウィン
    ドウを最大化して DOS 窓を後ろに隠してしまいましょう。すると forte4j
    をスタートメニューから起動した場合と同じように途中で止まってしまいま
    す。ここで、隠しておいた DOS 窓を表に出してみましょう。すると DOS 窓
    の文字がスクロールし、forte4j の起動が再開されるのが分かると思います。
     いろいろ試してみると次のようなことが分かると思います。Win32 アプリ
    が DOS 窓に文字を出力し、画面がいっぱいになってスクロールが起きよう
    とした時点で、DOS 窓が他のウィンドウの下に隠れていると、そこでそのア
    プリは停止してしまう。DOS 窓が一部でも見えるようになるとそのアプリは
    動作を再開する。DOS 窓が最小化されていてもアプリは停止しない。つまり
    forte4j が起動中にハングアップしてしまったのは、スクロールが発生する
    ほどの大量の文字を標準エラー出力に出していたためなのです。

     自分でプログラムを書く場合には、Win32 の非コンソールプログラムでは、
    標準(エラー)出力には文字を出力しないようにする必要があります。また、
    非コンソールプログラムからコンソールプログラムを呼び出す場合には、親
    プロセス側で、サブプロセスの標準(エラー)出力をリダイレクトした方が
    よいでしょう。

     今度は Java で書いたプログラムから他のプログラムを実行する場合のこ
    とを考えてみましょう。Runtime.exec の各メソッドを使って他のプログラ
    ムを実行すると、サブプロセスの標準入出力は Process.getOutputStream()
    などのメソッドによって親プロセスにリダイレクトされます。
    Process.getInputStream(), Process.getErrorStream() を用いて、サブプ
    ロセスの標準(エラー)出力を適切に処理してやれば、forte4j のようなプ
    ログラムが途中で停止することを防ぐことができます。逆にこれらを適切に
    処理しない場合はプログラムは途中で止まってしまう可能性があります。


7.コンパイル方法
     コンパイラには Visual C++ 6.0 を利用しています。VC++ に path が通
    っている状態で、
        > nmake -f fjavac.mak
    と入力するとコンパイルできます。


8.更新履歴
    2001/07/03  Ver.0.00
        ・最初の公開バージョン。

    2001/07/17  Ver.0.01
        ・エラーメッセージを少々修正。

    2001/11/20  Ver.0.02
        ・Java 2 SDK 1.3.1_01 で動かなかったのを修正。

    2002/05/28  Ver.0.03
        ・fjavac.ini で JDK(Java2 SDK) のパスを指定できるようにした。

    2004/06/09  Ver.0.04
        ・IBM の jikes に対応した。
        ・WinXP で正常に動かないことがあったのを修正。


9.注意事項、その他
    ・このプログラムはフリーソフトウェアです。
    ・このプログラムの著作権は作者である私 K.Takata(高田 謙)に帰属しま
      す。
    ・もしこのプログラムを使用することで何らかの問題が発生しても作者はい
      っさいの責任を負いません。各自の責任で使用してください。
    ・アーカイブを変更しない限り配布/転載は自由です。
    ・ソースファイルの使用は自由です。

        作者   : K.Takata(高田 謙)
        E-mail : kentkt@anet.ne.jp
        URL    : http://webs.to/ken/
                 http://homepage3.nifty.com/k-takata/

戻る

Copyright (C) 2001-2004 K.Takata