MSYSやCygwinでjavaを使う

Java_Wrapper (https://ja.osdn.net/projects/javaoncygwin/) を利用して、MSYS2やCygwinでJavaを使う環境を整備します。

# インストール先
インストール先は次の通りとします。

```
/usr/local/bin
```

# java_wrapperをダウンロード
[公式サイト](https://ja.osdn.net/projects/javaoncygwin/) からJava_Wrapperをインストール先フォルダへダウンロードします。

# WindowsにJavaのパスを通しておく。
次の通りに環境変数にパスを通しておきます。

- JAVA_HOME = JDKがインストールされているフォルダ

# java_wrapperを編集する
ダウンロードしたjava_wrapperはシェルスクリプトです。
WindowsのJavaは文字コードがcp932(Shift-JIS)でエンコーディングされているので、パスを通して実行すると、MSYSやCygwin上では当然、文字化けしてしまいます。

ですので次の通りに直しておきます。

```
-exec "$PROGRAM" $ARGS
+exec "$PROGRAM" $ARGS 2>&1 | iconv -f cp932 -t utf-8
```

# シンボリックリンクを作成する
インストール先フォルダへ移動した後、次のコマンドを打ちます。

```
$ java_wrapper createsymlinks
```

これで、*%JAVA_HOME%\bin* 内にあるすべての実行ファイルがjava_wrapperを通して実行されるようになりました。

# 実行してみる
実際に実行してみます。

```
$ java
使用方法: java [-options] class [args...]
           (クラスを実行する場合)
   または  java [-options] -jar jarfile [args...]
           (jarファイルを実行する場合)
optionsには次のものがあります。
    -d32          使用可能な場合は32ビットのデータ・モデルを使用する
    -d64          使用可能な場合は64ビットのデータ・モデルを使用する
    -server       "server" VMを選択する場合
                  デフォルトVMはserverです.

    -cp <ディレクトリおよびzip/jarファイルのクラス検索パス>
    -classpath <ディレクトリおよびzip/jarファイルのクラス検索パス>
                  クラス・ファイルを検索するディレクトリ、
                  JARアーカイブおよびZIPアーカイブの;で区切られたリストです。
    -D<name>=<value>
                  システム・プロパティを設定する
    -verbose:[class|gc|jni]
                  詳細な出力を行う
    -version      製品バージョンを出力して終了する
    -version:<value>
                  警告: この機能は非推奨であり、詳細のリリースで
                  廃止されます。
                  指定したバージョンを実行に必須にする
    -showversion  製品バージョンを出力して続行する
    -jre-restrict-search | -no-jre-restrict-search
                  警告: この機能は非推奨であり、詳細のリリースで
                  廃止されます。
                  ユーザーのプライベートJREをバージョン検索に含める/除外する
    -? -help      このヘルプ・メッセージを出力する
    -X            非標準オプションに関するヘルプを出力する
    -ea[:<packagename>...|:<classname>]
    -enableassertions[:<packagename>...|:<classname>]
                  指定した粒度でアサーションを有効にする
    -da[:<packagename>...|:<classname>]
    -disableassertions[:<packagename>...|:<classname>]
                  指定した粒度でアサーションを無効にする
    -esa | -enablesystemassertions
                  システム・アサーションを有効にする
    -dsa | -disablesystemassertions
                  システム・アサーションを無効にする
    -agentlib:<libname>[=<options>]
                  ネイティブ・エージェント・ライブラリ<libname>をロードする。例: -agentlib:hprof
                  -agentlib:jdwp=helpと-agentlib:hprof=helpも参照
    -agentpath:<pathname>[=<options>]
                  フルパス名でネイティブ・エージェント・ライブラリをロードする
    -javaagent:<jarpath>[=<options>]
                  Javaプログラミング言語エージェントをロードする。java.lang.instrumentを参照
    -splash:<imagepath>
                  指定したイメージでスプラッシュ画面を表示する
詳細はhttp://www.oracle.com/technetwork/java/javase/documentation/index.htmlを参照してください。
```

文字化けすることなくJavaを呼び出すことができました。

```
$ javac
使用方法: javac <options> <source files>
使用可能なオプションには次のものがあります。
  -g                         すべてのデバッグ情報を生成する
  -g:none                    デバッグ情報を生成しない
  -g:{lines,vars,source}     いくつかのデバッグ情報のみを生成する
  -nowarn                    警告を発生させない
  -verbose                   コンパイラの動作についてメッセージを出力する
  -deprecation               非推奨のAPIが使用されているソースの場所を出力する
  -classpath <path>          ユーザー・クラス・ファイルおよび注釈プロセッサを検索する位置を指定する
  -cp <path>                 ユーザー・クラス・ファイルおよび注釈プロセッサを検索する位置を指定する
  -sourcepath <path>         入力ソース・ファイルを検索する位置を指定する
  -bootclasspath <path>      ブートストラップ・クラス・パスの場所をオーバーライドする
  -extdirs <dirs>            インストール済拡張機能の場所をオーバーライドする
  -endorseddirs <dirs>       推奨規格パスの場所をオーバーライドする
  -proc:{none,only}          注釈処理やコンパイルを実行するかどうかを制御します。
  -processor <class1>[,<class2>,<class3>...] 実行する注釈プロセッサの名前。デフォルトの検出処理をバイパス
  -processorpath <path>      注釈プロセッサを検索する位置を指定する
  -parameters                メソッド・パラメータにリフレクション用のメタデータを生成します
  -d <directory>             生成されたクラス・ファイルを格納する位置を指定する
  -s <directory>             生成されたソース・ファイルを格納する場所を指定する
  -h <directory>             生成されたネイティブ・ヘッダー・ファイルを格納する場所を指定する
  -implicit:{none,class}     暗黙的に参照されるファイルについてクラス・ファイルを生成するかどうかを指定する
  -encoding <encoding>       ソース・ファイルが使用する文字エンコーディングを指定する
  -source <release>          指定されたリリースとソースの互換性を保つ
  -target <release>          特定のVMバージョン用のクラス・ファイルを生成する
  -profile <profile>         使用されているAPIが指定したプロファイルで使用可能かどうかを確認します
  -version                   バージョン情報
  -help                      標準オプションの概要を出力する
  -Akey[=value]              注釈プロセッサに渡されるオプション
  -X                         非標準オプションの概要を出力する
  -J<flag>                   <flag>を実行システムに直接渡す
  -Werror                    警告が発生した場合にコンパイルを終了する
  @<filename>                ファイルからの読取りオプションおよびファイル名


```

javacも文字化けすることなく呼び出せました。

# 参考サイト

- http://www.02.246.ne.jp/~torutk/javaoncygwin/javaoncygwin.html
- http://myfuturesightforpast.blogspot.jp/2015/10/cygwinmsys2windows.html