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

bab*_*itt 9 gradle valdr-bean-validation

我正在开发一个使用EJB2s的项目.创建的EJB Jars需要在应用程序服务器捆绑在war/ear中并进行部署之前进行其他处理.

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

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

jar.doLast{
    ejbDeploy.execute()
} 
Run Code Online (Sandbox Code Playgroud)

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

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

  1. 挂钩构建图并在jar任务后显式添加它.
  2. 在jar.doLast {}中以某种方式设置它
  3. 将其设置为WAR任务执行的先决条件

有推荐的方法吗?

谢谢!

Dav*_*que 6

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

war {
    it.dependsOn ejbDeploy
    ...
}
Run Code Online (Sandbox Code Playgroud)


Sne*_*kse 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'
}
Run Code Online (Sandbox Code Playgroud)