Eclipse x gradle-tomcat-plugin の自動リロード

  • 17
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

こんな方が対象

  • 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 と書いておくのがオススメです。

以下のサイトの情報をつなぎあわせてこんな結論になりました。ありがとうございます。