Gradleとgradle-tomcat-pluginを使ってローカルでTomcatを起動する
最近自前でwarファイルをJavaコンテナにデプロイする機会が減って、実行可能なfat-jarをsystemdに管理してもらうことが増えました。 ただ、今回は敢えてローカル環境でGradleを使ってTomcatアプリケーションを動作させる方法を調査しました。
ローカル環境でTomcatを動かそう
最近はもっぱらSpring Bootを使うのですが、とある事情により、素のTomcat上でwarアプリケーションを動作させる必要が出てきました。
ローカル環境で開発を行う上では、IDEもIntelliJを使うようになり、IntelliJにはTomcat pluginも最初からバンドルされていません。
昔使っていたEclipseやSpring Tool Suite にはTomcatのアイコンがあって、それをポチってアプリケーションを起動させていました。懐かしい。
IntelliJにプラグインをインストールするのも方法論としてはアリですが、今回のユースケースのためだけにIDEを拡張するのも嫌なので、別の方法を模索したかったのです。
環境情報
以下の環境にて方法を模索してみます。
- Gradle 4.8
- Tomcat 9
gradle-tomcat-plugin を使う
割とすぐに答えが見つかりました。
ビルドツールにGradleを使っている場合には、gradle-tomcat-plugin を使うことで、Gradle経由でTomcatの起動ができそうです。
今回試したサンプルコードは こちら において置くとして、肝心の build.gradle
だけ貼り付けておきます。
1buildscript {
2 repositories {
3 mavenCentral()
4 jcenter()
5 }
6 dependencies {
7 classpath group: 'com.bmuschko', name:'gradle-tomcat-plugin', version:'2.5'
8 }
9}
10
11ext {
12 tomcatVersion = '9.0.10'
13}
14
15apply plugin: 'eclipse'
16apply plugin: 'idea'
17apply plugin: 'java'
18apply plugin: 'com.bmuschko.tomcat'
19
20sourceSets {
21 sourceCompatibility = 1.8
22 targetCompatibility = 1.8
23
24 [compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
25}
26
27repositories {
28 mavenCentral()
29}
30
31dependencies {
32 providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '4.0.1'
33 providedCompile group: 'javax.servlet.jsp', name: 'javax.servlet.jsp-api', version: '2.3.1'
34 compile group: 'org.apache.taglibs', name: 'taglibs-standard-impl', version: '1.2.5'
35
36 tomcat "org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}"
37 tomcat "org.apache.tomcat.embed:tomcat-embed-logging-juli:9.0.0.M6"
38 tomcat("org.apache.tomcat.embed:tomcat-embed-jasper:${tomcatVersion}") {
39 exclude group: "org.eclipse.jdt.core.compiler", module: "ecj"
40 }
41}
42
43tomcat {
44 httpProtocol = 'org.apache.coyote.http11.Http11Nio2Protocol'
45 ajpProtocol = 'org.apache.coyote.ajp.AjpNio2Protocol'
46 contextPath = 'soudegesu'
47}
tomcat 9を使うときのみ tomcat-embed-logging-juli
のバージョンが tomcat-embed-core
と同じにできない所が留意点でしょうか。
まだ、artifactがpublishされていないようですね。
tomcat
のブロックにはコンテキストパスをはじめ、様々なTomcatのオプションを指定できます。
ローカルで開発する分には
アプリケーションは ./gradlew
で起動できます。
1./gradlew tomcatRun
サンプルアプリケーションが動いているか確認しましょう。問題なさそうですね。
1curl http://localhost:8080/soudegesu/sample
2
3<!DOCTYPE html>
4<html>
5<head>
6<title>Sample</title>
7</head>
8<body>
9Sample !!!
10</body>
11</html>
Tomcatを停止するときは以下でした。
1./gradlew tomcatStop
まとめ
GradleでTomcatを使った開発したいときには gradle-tomcat-plugin
を使うと簡単に導入できることがわかりました。
IDEにプラグインを入れると他のJavaプロジェクトを実装する際にも影響が出てしまいますが、 Graldeプラグインとして利用することで影響範囲がプロジェクト内に留められるので魅力的です。