jetty9とかmavenとかOpenJDKとか

普段、phpなんで、java周りの知識がないのですが、触る必要があったので、やってみたことをまとめておく。
なお、したかったことは、githubに登録されている以下のJavaサーブレットを動かしてみたかったということ。

https://github.com/tomoyukilabs/WebPushTest

で、したこと。

  1. jetty9のインストールと起動
  2. mavenのインストール
  3. githubからファイルを取得
  4. BouncyCastleProviderのインストール
  5. jettyのSSL対応

ちょっと確認したかっただけなんだけど、結構やったなぁ‥。

1)jetty9のインストールと起動

githubのドキュメントを見てみると、jetty9というものを使うらしいのでインストール。

http://www.eclipse.org/jetty/download.html

を確認したところ、JDKのバージョンが低いようなので、まずは、以下でJDKのバージョンを更新した。

yum -y update java-*

更新後、

alternatives --config java

で、利用するJDKのバージョンを変更。
次にjettyのインストール。

wget http://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/9.3.10.v20160621/jetty-distribution-9.3.10.v20160621.tar.gz
tar zxf jetty-distribution-9.3.10.v20160621.tar.gz

解凍したファイルを/usr/localなどからリンクを貼る。

cd /usr/local
ln -s /path/to/jetty-distribution-9.3.10.v20160621 jetty

jettyをデーモンのように管理するにはjetty/bin/jetty.shを/etc/rc.d/init.d/にコピーすればOK。

cp /usr/local/jetty/bin/jetty.sh /etc/rc.d/init.d/jetty

/etc/rc.d/init.d/jettyの適当な箇所に以下を追加して保存。

JETTY_HOME="/usr/local/jetty/"

これで完了。

service jetty start

なんかでjettyを起動すると、

http://198.168.33.10:8080

でアクセスできるようになる。(デフォルトのポートは8080)
なお、このURLにアクセスしたときに表示されるファイルは、jetty/webapps/以下に設置する。ファイルの設置方法については、
http://www.galileo.co.jp/blogs/dv/archives/2012-10-19-17-14-09.html
が分かりやすかった。

2)mavenのインストール

githubのファイルを見たところ、pom.xmlなるものがある。調べて見たところ、Javaの環境を管理しているファイルでmavenというやつで使うらしい。

mavenのインストールは
https://kengotoda.gitbooks.io/what-is-maven/content/primer/install.html
にあるように
http://maven.apache.org/download.cgi
から最新のソースを取得して解凍、apache-maven-3.3.9/binをPATHに設定すれば完了する。

ためしにmvnコマンドを発行してみるが、JDKのバージョンに問題があるというエラーが出る。
調べたところ、yumでJDKをインストールした場合、JAVA_HOMEが正しく設定されていないので設定する必要があるということらしい。

readlink $(readlink $(which java))

を発行すると、

/usr/lib/jvm/jre-1.8.0-openjdk.x86_64/bin/java

のような感じで表示されるので、.bash_profileに以下のように追記。

export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk.x86_64
export PATH=$JAVA_HOME:$PATH

その後、

source .bash_profile

で設定を反映させる。

これで、先ほど出ていたJDKのバージョンの問題も解消。

3)githubからファイルを取得

適当なディレクトリで

git clone https://github.com/tomoyukilabs/WebPushTest.git

を発行してファイルを取得。WebPushTest/に移動して

mvn package

を発行すると、必要なファイルを自動的にダウンロードしてきて、コンパイルなどが行われる。素晴らしい!
targetディレクトリ以下に作成されたものが入っている。この中のwarファイルをjetter/webapps/以下にコピー後、

http://198.168.33.10:8080

にアクセスすると、アクセスできるコンテクストが表示されている。
この中にwebpushtestがあるので、アクセスすると表示されるのだがBouncyCastleProviderがインストールされていないというエラーが表示されていることに気がついた。

4)BouncyCastleProviderのインストール

BouncyCastleProviderとは、JAVAの暗号ライブラリらしい。
http://www.langedge.jp/blog/index.php?itemid=150

http://www.bouncycastle.org/latest_releases.html
から自分のJDKのバージョンにあったファイルをダウンロードする。

wget http://www.bouncycastle.org/download/bcprov-ext-jdk15on-154.jar

ダウンロードしたものをJDKの所定のディレクトリにコピー

mv bcprov-ext-jdk15on-154.jar /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/lib/ext/

/usr/lib/jvm/jre-1.8.0-openjdk.x86_64/lib/security/java.securityを編集して

security.provider.2=org.bouncycastle.jce.provider.BouncyCastleProvider

を追加する。(security.provide.の後の数字は調整必要)
jettyを再起動してアクセスするとエラーが解消された。

5)jettyのSSL対応

https://hirooka.pro/?p=5266
を参考にjettyの修正ファイルを修正するとよさげだが、疲れたので終了。