9

我正在开发一个使用 EJB2 的项目。创建的 EJB Jars 需要应用程序服务器进行额外处理,然后才能将它们捆绑到 war/ear 中并进行部署。

我创建了一个自定义任务,如果我显式调用它(gradle ejbDeploy),它就可以进行额外的处理,但是在将它安装到 gradle 多项目生命周期中时遇到了麻烦。我需要以某种方式将其添加到构建图以在 jar 任务之后自动执行。

我的第一次尝试是将它添加到 jar 中

jar.doLast{
    ejbDeploy.execute()
} 

这似乎适用于任意代码块,但不适用于任务

推荐的解决方案是什么?我看到三种方法:

  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 回答