Javaはmavenもしくはgradleというビルドツールを使用する。ここではgradleについて扱う。
ビルドの設定はbuild.gradleで行う。
ここで使われている変数は、gradle.propertiesに定義されていることがある。
ビルドコマンド
warやjarファイルとしてビルドする。
基本的にはwarとしてビルドするが、他のリポジトリから読み取られるライブラリとしてビルドする場合にはjarにすることもある。
warファイルにビルドする
gradlew.bat clean build -x test -x compileTestJava -x check
gradlew.bat buildだけでも良いのだが、cleanでキャッシュクリアしている。
また、-x [タスク名] とすることで、タスクをスキップできる。
上記では、テストやソースコードチェック(インデントやスペルチェック)をスキップしている。
これにより、ビルド時間を短縮できる。
jarファイルとしてビルドする
gradlew clean jar
デプロイ
サーバーのwebappsフォルダに、ビルドしたwarファイルを配置する。しかし、root権限でないとwebappsフォルダに直接アクセスできないため、WinSCPなどで直接ファイルを配置することはできない。
そのため、任意のworkフォルダにwarを配置し、RLoginなどのSSHクライアントでwarファイルを移動しなおす。
今回は以下をworkフォルダとする。
/home/ec2-user/work
ファイルを配置したら、以下のコマンドでデプロイする。
cd /opt/tomcat/webapps // webappsフォルダに移動
service tomcat stop // tomcat停止
rm -rf appName // もともとあるアプリを削除
rm -rf appName.war // もともとあるアプリを削除
cp /home/ec2-user/work/appName.war /opt/tomcat/webapps/ // warファイルを移動
chmod 644 appName.war // warファイルの権限を修正
service tomcat start // tomcat起動
warファイルがwebapps配下にある状態でtomcatを起動すると、warファイルが自動的に展開される
ビルドのキャッシュ
ビルドはSpringFrameworkなどのライブラリについても行われるため、初回はかなり長い時間を要する。
2回目以降はキャッシュを参照するため、ビルド時間が短くなる。
しかし、cleanだけではこのキャッシュが更新されず、ビルドエラーを引き起こすケースが良くある。その場合は、物理的にキャッシュを削除することで解消される。
キャッシュはローカルでは以下のあたりに保存されている。
C:\Users\username\.gradle\caches\modules\filles-2.1\
eclipseでは、パッケージエクスプローラーの参照ライブラリーを見ると、プロジェクトで使用されているライブラリが一覧で表示される。
各ライブラリの右側に、ローカルのどのファイルを参照しているかが表示されており、上記のキャッシュを見ていることがわかる。
eclipseで実装しているのであれば、以下の手順で参照先を手動で変更することができる。
ビルドパスの構成>
『ライブラリ』タブ>参照しているライブラリを削除 // ここでcacheフォルダを参照していれば削除
『クラスパス』タブ>追加>参照したいライブラリを追加 // 本来参照したい資源に再設定
>適用
インシデント
build.gradleに記載されている変数が見つからない
これはgradle.propertiesとは何なのか、という話に直結する。
gradle.propertiesでは、gradle関連ファイルで使用するプロパティを定義しており、build.gradleで使用されている変数も、このファイルで定義されている。
build.gradleにはimport文など無いので、これを知らないとなんだこの変数??となる。
コメント