Gradle の EAR プラグイン で EJB JAR を扱う

blog1.mammb.com


EJB JAR の扱い

Gradle の EAR プラグインでは、以下のコンフィグレーションが追加される。

  • deploy : EAR ルート直下に配置される(非推移的)
  • earlib : ライブラリディレクトリ(lib)に配備される(推移的)

EJB JAR を利用する場合は以下のように deploy に指定することになる。

dependencies {
    deploy(project(":ejb"))
}

しかしこの場合、EJB JAR が依存するライブラリは lib に配備されない。

以下のように earlib にも指定し、自身の EJB JAR 自体を除外すると良い。

dependencies {
    deploy(project(":ejb"))
    earlib(project(":ejb")) {
        exclude(group = project(":ejb").group.toString(), module = project(":ejb").name)
    }
}


build.gradle.kts 設定

以下の4つのモジュールで構成されるプロジェクトの場合の設定例

  • common
  • ejb
  • war
  • ear

ejb

plugins {
  `java-library`
}

dependencies {
  api(project(":common"))
}

war

plugins {
  war
}

dependencies {
  providedCompile(project(":ejb"))
}

tasks.jar {
  enabled = false
}

ear

plugins {
  ear
}

dependencies {
  deploy(project(":ejb"))
  deploy(project(":war", "archives"))
  earlib("foo:bar:1.0.0")
  earlib(project(":ejb")) {
    exclude(group = project(":ejb").group.toString(), module = project(":ejb").name)
  }
}

tasks.jar {
    enabled = false
}

※ Gradle 10 では archives configuration は利用できなくなる予定なので、war 側で war 提供用の configuration を定義する必要がある

ear.ear

生成される ear.ear は以下のレイアウトとなる

ear.ear
  ├ META-INF
  ├ lib
  │  ├ foo-bar-1.0.0.jar
  │  └ common.jar
  ├ war.war
  └ ejb.jar