Gradle - 向现有任务添加其他任务

时间:2012-09-14 14:41:13

标签: gradle valdr-bean-validation

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

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

我的第一次尝试是用

将它添加到jar中
jar.doLast{
    ejbDeploy.execute()
} 

似乎适用于任意代码块,but not for tasks

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

  1. 挂钩构建图并在jar后显式添加 任务。
  2. 以某种方式在jar.doLast {}
  3. 中进行设置
  4. 将其设置为WAR任务执行的先决条件
  5. 是否有推荐的方法?

    谢谢!

3 个答案:

答案 0 :(得分:6)

我会选择方法#3并将其设置为战争任务的依赖关系,例如:

war {
    it.dependsOn ejbDeploy
    ...
}

答案 1 :(得分: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'
}

答案 2 :(得分:0)

添加以下内容,然后ejbDeploy将在jar之后,war

之前执行
jar.finalizedBy ejbDeploy

请参阅Gradle Docs. 18.11. Finalizer tasks

相关问题