フォーラム » つれづれ Java編 »
Jetty サーブレット
Jettyはアプリケーション組み込みサーブレットコンテナが可能なので、java -jar hello.war のようにサーブレットアプリケーションを実行させられるのではないか?
Jettyの組み込みアプリケーションの作り方を模索します。
返答 (3)
GradleプロジェクトでJetty - 高橋 徹 さんが約1年前に追加
Jetty 11は、Jakarta EE 9対応(Servlet 5.0)
Jetty 12は、Jakarta EE 10対応(Servlet 6.0)
GradleでJettyを使うアプリケーション開発は、org.grettyプラグインを使うのが良いとある。
- build.gradle.kts
plugin { war id("org.gretty") version "4.1.2" } : dependencies { compileOnly("jakarta.servlet:jakarta.servlet-api:6.0.0") implementation("org.eclipse.jetty:jetty-server:12.0.7") }
gretty 4.1.2は、Jetty 12には対応していない可能性あり。
warファイルのディレクトリとmail-class - 高橋 徹 さんが約1年前に追加
java -jar xxx.warで実行可能とするには、warファイルの中に次の構造でメインクラスが必要です。
- META-INF/MANIFEST.MFに、Main-Class属性でメインクラスのFQCNを定義
- warファイルにメインクラスのFQCNに合わせたディレクトリにメインクラスを配置
+- META-INF | +- MANIFEST.MF +- foo +- Main.class
しかし、Gradleのwarプラグインで生成すると、src/main/java以下のファイルは、
+- META-INF | +- MANIFEST.MF +- WEB-INF +- classes +- foo +- Main.class
となってしまい、java -jar xxx.warで実行できませんでした。
build.gradle.ktsに追記
from(fileTree("build/classes/java/main") {
include("**/Main.class")
})
で、src/main/java以下のMain.classがルートからのパスで生成されるようになりました。
ただし、Mainクラスから呼び出す依存クラスがルートからのパスにないと実行できません。(次の課題)