こんな方が対象
- Gradle と Tomcat と Eclipse を使っている
- gradle-tomcat-plugin プラグインを使って Gradle から Tomcat を起動している
- eclipse プラグインを使って .project や .classes を出力している
build.gradle
で以下の様な設定をすると、gradle tomcatRun
した後 Eclipse でコードを書き換えてビルドしたときに、Tomcat 側で自動リロードされるようになります。
build.gradle
// eclipse plugin の設定
eclipse {
classpath.file {
beforeMerged { classpath ->
classpath.entries.clear()
}
whenMerged { cp ->
// Eclipse のビルドファイルの配置を Tomcat のリロード判定対象と同じようにする。
// この設定を行うと、tomcatRun で実行中のサーバが、
// eclipse でビルドが走った時に自動リロードされるようになる。
cp.entries.findAll { it instanceof SourceFolder && it.path.startsWith("src/main/") }*.output = "src/main/webapp/WEB-INF/classes"
// Gradle でのテストのために、Gradle の出力先に揃えておく
cp.entries.findAll { it instanceof SourceFolder && it.path.startsWith("src/test/") }*.output = "build/classes/test"
cp.entries.findAll { it instanceof SourceFolder && it.path.startsWith("src/test/resources") }*.output = "build/resources/test"
cp.entries.removeAll { it.kind == "output" }
}
}
}
// compileJava 等でのクラスファイルの出力先を Tomcat のリロード判定対象と同じようにする。
sourceSets.main.output.classesDir = 'src/main/webapp/WEB-INF/classes'
clean {
// add customized class output path to deletion targets of 'clean' task.
delete << 'src/main/webapp/WEB-INF/classes'
}
.gitignore
には **/WEB-INF/classes
と書いておくのがオススメです。
以下のサイトの情報をつなぎあわせてこんな結論になりました。ありがとうございます。
- http://www.glamenv-septzen.net/view/1165 - eclipse プラグイン以外についてはこちらの記事を参考にしました。
-
https://github.com/bmuschko/gradle-tomcat-plugin/issues/81 - reloadable が動かないよという gradle-tomcat-plugin の issue。作者から
sourceSets.main.output.classesDir
の書き換えが提示されています。 - http://stackoverflow.com/questions/17451567/splitting-main-and-test-in-gradles-eclipse-builds - eclipse プラグインのクラスファイル出力先の書き換えについて