9

EJB2 を使用するプロジェクトに取り組んでいます。作成された EJB Jar は、war/ear にバンドルされてデプロイされる前に、アプリケーション サーバーによる追加の処理を必要とします。

明示的に呼び出した場合に追加の処理を実行するカスタム タスク (gradle ejbDeploy) を作成しましたが、gradle マルチプロジェクト ライフサイクルに適合させるのに問題があります。jar タスクの後に自動的に実行するには、何らかの方法でビルド グラフに追加する必要があります。

私の最初の試みは、それをjarに追加することでした

jar.doLast{
    ejbDeploy.execute()
} 

これは任意のコード ブロックでは機能するようですが、タスクでは機能しないようです

これに対する推奨される解決策は何ですか? 私は3つのアプローチを見ています:

  1. ビルド グラフにフックし、jar タスクの後に明示的に追加します。
  2. jar.doLast{} で何らかの方法で設定します{}
  3. WARタスク実行の前提条件として設定する

推奨されるアプローチはありますか?

ありがとう!

4

3 に答える 3

6

私はアプローチ#3に行き、戦争タスクの依存関係として設定します。

war {
    it.dependsOn ejbDeploy
    ...
}
于 2012-09-14T14:47:40.833 に答える
3

私は Gradle を初めて使用しますが、答えは何を達成しようとしているかによって異なります。

誰かがコマンドを実行したときにタスクを実行したい場合はgradle jar、アプローチ #3 では不十分です。

これが私が似たようなことをしたことです

classes {
    doLast {
        buildValdrConstraints.execute()
    }
}

task buildValdrConstraints(type: JavaExec) {
    main = 'com.github.valdr.cli.ValdrBeanValidation'
    classpath = sourceSets.main.runtimeClasspath
    args '-cf',valdrResourcePath + '/valdr-bean-validation.json'
}
于 2014-08-25T19:08:15.303 に答える
0

以下を追加すると、 のejbDeploy直後に実行されますjarが、前にwar

jar.finalizedBy ejbDeploy

Gradle ドキュメントを参照してください。18.11。ファイナライザ タスク

于 2016-12-23T06:51:23.637 に答える