はじめに
Javaの開発からしばらく遠のいていたけども、触る機会があったのでREST API(Jerseyによる実装)を開発する環境を整えようと調べていたら、昔と今で開発環境の作り方が全然違ったので備忘録として手順を残す。結論から言うと、ローカルにJavaやTomcatをインストールする必要なく、開発環境を構築できる...。JDKやTomcatのバージョン修正なんかも1行書き換えるだけですぐ実行できてしまう...。すごいね。
手順
Docker Desktopインストール
こちらからダウンロードし、インストール。
https://www.docker.com/products/docker-desktop
これがないと始まらないので、使えない場合はごめんなさい。
VSCodeプラグインインストール
VSCodeで次の4つのプラグインをインストールする。
- Language Support for Java(TM) by Red Hat
- Java Extension Pack
- Tomcat for Java
- Remote Development
mavenコンテナを立ち上げる
プロジェクト用のフォルダを作成し、そのフォルダでVSCodeを開く。
VSCode左下のリモートツールアイコンをクリックし、「Open Folder in Container」を選択。

どのフォルダをコンテナに接続するか聞いてくるので、そのまま「Open」ボタンを押す。

Jersey2インストール
次に、Jerseyをインストールする。次のページを参考に、mvnコマンドを実行する。
https://eclipse-ee4j.github.io/jersey/download.html

mvn archetype:generate -DarchetypeGroupId=org.glassfish.jersey.archetypes \
-DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeVersion=2.34
インストールが進むと、groupId、artifactId、version、packageを聞いてくるので、環境に合わせて入力する。

入力例
| 項目 | 値 |
| groupId | com.example |
| artifactId | jersey-sample |
| version | 1.0-SNAPSHOT |
| package | com.example |
この時点で、次のようなファイルが生成されている。
jersey-sample
│ pom.xml
│ tree.txt
│
└─src
└─main
├─java
│ └─com
│ └─example
│ MyResource.java
│
├─resources
└─webapp
│ index.jsp
│
└─WEB-INF
web.xml
ここで一旦VSCodeを終了する。
tomcatコンテナ用の設定ファイルを作成する。
次の3つのファイルを作成する。
- .devcontainer/devcontainer.json
- .devcontainer/Dockerfile
- .vscode/settings.json
jersey-sample
│ pom.xml
│ tree.txt
│
├─.devcontainer
│ devcontainer.json
│ Dockerfile
│
├─.vscode
│ settings.json
│
└─src
└─main
├─java
│ └─com
│ └─example
│ MyResource.java
│
├─resources
└─webapp
│ index.jsp
│
└─WEB-INF
web.xml
{
"name": "tomcat",
"dockerFile": "Dockerfile",
"forwardPorts": [
8080
],
"workspaceFolder": "/opt/project",
"mounts": [
"source=${localWorkspaceFolder},target=/opt/project,type=bind,consistency=cached"
],
"extensions": [
"adashen.vscode-tomcat",
"vscjava.vscode-java-pack"
]
}
FROM tomcat:jdk11-adoptopenjdk-hotspot
RUN mkdir /opt/project
RUN apt-get update && \
apt-get -y install maven
DockerfileはJDK8のコンテナでも問題ないが、JDK8だとhotCodeReplaceが利用できない。
上記はtomcat9だが、Jersey3を動かしたい場合はtomcat10でなければ動かない。
JDK8の場合:FROM tomcat:8.5.49-jdk8-openjdk
Jersey3の場合:FROM tomcat:10.0.7-jdk11-adoptopenjdk-hotspot
{
"java.debug.settings.hotCodeReplace": "auto",
"java.home": "/opt/java/openjdk",
"java.configuration.updateBuildConfiguration": "automatic"
}
/opt/java/openjdk はコンテナ側のJDKインストールフォルダ
VSCode起動→コンテナ起動
上記までの手順で作成された「jersey-sample」フォルダでVSCodeを開き、リモートツールアイコンから「Open Folder in Container」を選択。

どのフォルダをコンテナに接続するか聞いてくるので、そのまま「Open」ボタンを押す。

Tomcatサーバ追加
画面左下の「TOMCAT SERVERS」にカーソルを合わせると「+」ボタンが表示されるので、クリックし、「/usr/local/tomcat/」を入力する。
この/usr/local/tomcat/はコンテナ側のフォルダ。

Tomcatが登録されるので、右クリックし「Start」を選択する。

pom.xml修正
現状ビルドすると警告が出るので、pom.xmlを開いてsourceおよびtargetのJDKバージョンを「1.8」から「11」に修正する。

同様にpom.xmlの「org.glassfish.jersey.media」がコメントアウトされているので、コメントを削除する。これをやらないとJsonObjectなどが利用できない。

warファイル作成
ターミナルを開き、次のコマンドを実行する。
mvn package
warファイル配備
コマンドが完了すると、targetフォルダ配下にwarファイルができているので、右クリックし、「Debug on Tomcat Server」を選択する。

ブラウザを開き、http://localhost:8080/jersey-sample/webapi/myresource にアクセスすると、APIが動いているのを確認できる。

参考
- Visual Studio Code + Docker + Remote DevelopmentでTomcat上のWebアプリを超簡単にデバッグ
https://tech-lab.sios.jp/archives/18917







