わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

CygwinでJavaとTomcat

Windowsに,Java開発環境をインストールし,Cygwinからコンパイルなどがスムーズにできるよう,少し作業をしていました.
Javaのダウンロードについては,検索で見つけたhttp://www.oracle.com/technetwork/jp/java/javase/downloads/index.htmlにアクセスします.「こちら(USサイト)」をクリックし,JDKの下の「DOWNLOAD」ボタンを押します.
Java SE Development Kit なになに」の2〜3行後の「Accept License Agreement」の左をクリックしてから,OSに合わせてダウンロードするファイルを選びます.今回は「jdk-8u121-windows-x64.exe」にしました.
ダウンロードが完了したら,exeファイルをダブルクリック.特に設定を変えることなくインストールを終え,念のため再起動しました.
Cygwinのシェル上では,以下の3つのコマンドを実行します.

export JAVA_HOME="/cygdrive/c/Program Files/Java/jdk1.8.0_121"
PATH=$JAVA_HOME/bin:$PATH
rehash

これで,which java javacを実行すると,パスが出力されます.
ただ,何かあってJavaをアップグレードしたら,その都度,環境変数JAVA_HOMEの値を変えないといけません.ちょっと面倒です.何かいいのがないか,検索…ありました.

java_wrapperを導入します.

wget http://ymu.dl.osdn.jp/javaoncygwin/53264/java_wrapper && chmod +x java_wrapper && mv java_wrapper ~/bin
cd /usr/local/bin
~/bin/java_wrapper createsymlinks

念のため新たなCygwinシェルを開き,which java javacを実行すると,「/usr/local/bin/java」「/usr/local/bin/javac」と出ます.java -versionやjavac -versionで,バージョン情報も出ました.
シェルの起動時に,設定するよう,シェルスクリプトにしておきましょう.ファイル名は.zshrc.javaとし(Gist),.zshrcに「source $ZDOTDIR/.zshrc.java」と書いて読み込むようにしました.
.zshrc.javaの内容をかいつまんで説明します.はじめに,~/.java_homeというファイルがあるかを調べます.もしあれば,その中身を,環境変数JAVA_HOMEの値とします.
~/.java_homeがなければ,C:\Program Files\Javaに,jdkから始まるディレクトリ名があるかを調べ,あれば,その中で最後の名前を,JAVA_HOMEの値とします.「jdkから始まる」(対応するコードは「| grep jdk」)も必須で,この選別をしていないと,ある実行環境では,jre1.8.0_121のほうを取得し,javacコマンドが使えなかったのでした.
環境変数JAVA_HOMEが設定されているか*1,$JAVA_HOMEのディレクトリが存在するか,~/bin/java_wrapperが存在しないか,などで場合分けして,実行パスの設定などの処理もしています.
Javaのバージョンが上がれば,~/.java_homeを消して,シェルを立ち上げ直すだけです.
Tomcatは…http://tomcat.apache.org/にアクセスします.左の「Tomcat 8」をクリックし,8.0.41の中の「tar.gz」です.
apache-tomcat-8.0.41.tar.gzをダウンロードしまして,適当なところに移動させてから,tar xf apache-tomcat-8.0.41.tar.gzで伸長し,./apache-tomcat-8.0.41/bin/startup.shで起動,./apache-tomcat-8.0.41/bin/shutdown.shで終了しました.
javaファイルのコンパイル時には,メッセージの文字コードにも注意が必要です.バッドノウハウを承知で,「javac ... 2>&1 | lv」という書き方をとっています.また,ソースファイルがUTF-8のときは,「javac -encoding UTF-8 ...」と書きます.

*1:この判定を,適切なものに置き換えれば,bashでも動くスクリプトファイルになると思います.