プロジェクト

全般

プロフィール

Jetty サーブレット

高橋 徹 さんが3ヶ月前に追加

Jettyはアプリケーション組み込みサーブレットコンテナが可能なので、java -jar hello.war のようにサーブレットアプリケーションを実行させられるのではないか?
Jettyの組み込みアプリケーションの作り方を模索します。


返答 (3)

GradleプロジェクトでJetty - 高橋 徹 さんが3ヶ月前に追加

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 - 高橋 徹 さんが3ヶ月前に追加

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クラスから呼び出す依存クラスがルートからのパスにないと実行できません。(次の課題)

    (1-3/3)