最小構成のjerseyプログラムを作成する

# 概要
`jersey`とは簡単に言うと`java`でREST-APIが作れるライブラリです。
`jersey`は`jax-rs`という仕様に基づいて実装された参照実装のひとつです。

下記に`eclipse`, `maven`を使用して`jersey(jax-rs)`を使用したアプリを最小構成で作る手順を記載します。

# 検証環境
* java 17
* eclipse 2022-12
* tomcat 10
* maven 3.8.7

# プロジェクト作成
* `ウインドウ`, `設定`, `Java`, `インストール済みのjre`, `追加`, `標準VM`
  * openjdk17を指定
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459219/2730ec6c-acc7-79b2-6517-6aa20caf521e.png)

* `ファイル`, `新規`, `動的Webプロジェクト`
  * `プロジェクト名`に`SampleJersey`を指定
  * `構成`, `変更`
    * `Java 17`を指定
    * `dynamic web module version 5.0`を指定
      ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459219/2dbadceb-b047-6795-a3cd-fa319dfc3be8.png)
      ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459219/a4b0dc28-0eb9-f836-2db5-7fc946068c03.png)


  * `次へ`
    * `デフォルト出力フォルダー`を`target`に指定
      ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459219/71456b63-8f78-24ed-af64-293e5dc89831.png)

  * `次へ`
    * `web.xmlデプロイメント記述子の生成`にチェック
      ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459219/cb138277-ec6c-79ca-17b6-2260d6eb3282.png)

* プロジェクトを右クリック
  `構成`, `Mavenプロジェクトへ変換`
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459219/60de83d2-9805-45cf-f978-d4ecb30ad182.png)

# ソースコード
下記のようなファイル構成でソースを配置します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459219/36312778-a21d-106e-c6cc-8400780c6504.png)

```xml:pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>SampleJersey</groupId>
	<artifactId>SampleJersey</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>

	<properties>
		<jersey.version>3.1.1</jersey.version>
	</properties>

	<build>
		<finalName>SampleJersey</finalName>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.10.1</version>
				<configuration>
					<source>17</source>
					<target>17</target>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-war-plugin</artifactId>
				<version>3.3.2</version>
			</plugin>
		</plugins>
	</build>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.glassfish.jersey</groupId>
				<artifactId>jersey-bom</artifactId>
				<version>${jersey.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<dependencies>
		<dependency>
			<groupId>org.glassfish.jersey.containers</groupId>
			<artifactId>jersey-container-servlet</artifactId>
		</dependency>
		<dependency>
			<groupId>org.glassfish.jersey.inject</groupId>
			<artifactId>jersey-hk2</artifactId>
		</dependency>
	</dependencies>
</project>

```

```xml:web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="5.0">
	<servlet>
		<servlet-name>Jersey Web Application</servlet-name>
		<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>Jersey Web Application</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>
</web-app>
```

```java:SampleApi.java
package sampleapi;

import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;

@Path("")
public class SampleApi {

	@GET
	@Produces(MediaType.TEXT_PLAIN)
	public String getIt() {
		return "Got it!!!";
	}

}
```

# コンパイル
* 今回は`maven`コマンドからコンパイルを行います。
  * 参考
    * Linux 環境に Maven コマンドインストール
https://weblabo.oscasierra.net/install-maven-35-centos7/

* あとはプロジェクトの`pom.xml`が存在するフォルダに移動して下記コマンドを実行
  ```sh
  $ maven clean package
  ```
* コンパイルに成功すると`target`ディレクトリ配下に`SampleJersey.war`が生成されます。

# 疎通確認
* 今回はコンパイルされたwarをdocker版tomcatで動作確認します。
  dockerがインストールされた環境が必要です。
* tomcatコンテナ起動
  `SampleJersey.war`のあるディレクトリをコンテナ内の`webapps`にマウントして起動します。
  実行前に`SampleJersey.war`が/root/java/SampleJersey/targetにあることを確認しておきます。
  ```sh
  docker run -itd --rm --name tomcat -p 8080:8080 -v /root/java/SampleJersey/target:/usr/local/tomcat/webapps tomcat:10-jdk17
  ```

* 接続
  ```sh
  curl http://localhost:8080/SampleJersey/
  ```
  `SampleApi.java`に記載した値`Got it!!!`が返ってくれば成功です。