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

Gradle 渐变-向现有任务添加其他任务,gradle,valdr-bean-validation,Gradle,Valdr Bean Validation,我正在从事一个使用EJB2的项目。创建的ejbjar需要应用服务器进行额外的处理,然后才能捆绑到war/ear中并进行部署 我已经创建了一个自定义任务,如果我显式地调用它(gradle ejbDeploy),它可以执行额外的处理,但是在将它融入gradle多项目生命周期时遇到了困难。我需要以某种方式将其添加到构建图中,以便在jar任务之后自动执行 我的第一次尝试是用 jar.doLast{ ejbDeploy.execute() } 这似乎适用于任意代码块 推荐的解决方案是什么?我认

我正在从事一个使用EJB2的项目。创建的ejbjar需要应用服务器进行额外的处理,然后才能捆绑到war/ear中并进行部署

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

我的第一次尝试是用

jar.doLast{
    ejbDeploy.execute()
} 
这似乎适用于任意代码块

推荐的解决方案是什么?我认为有三种方法:

  • 钩住构建图并显式地将其添加到jar之后 任务
  • 在jar.doLast{}中设置它
  • 将其设置为执行战争任务的先决条件
  • 有推荐的方法吗

    谢谢

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

    war {
        it.dependsOn ejbDeploy
        ...
    }
    

    我是格拉德尔的新手,但我想说,答案真的取决于你想要完成什么

    如果您希望在有人运行命令时执行任务
    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'
    }
    

    添加以下内容,然后
    ejbDeploy
    将在
    jar
    之后执行,但在
    war
    之前执行

    jar.finalizedBy ejbDeploy
    

    请看

    我对格拉德尔相对来说是新手。完整的语法是:war{it.dependsOn project('ejbProject').tasks['ejbDeploy']}?这取决于您如何组织项目和子项目。如果任务包含在当前项目中(可能应该是imo),则上述语法可以正常工作。您可以使用
    allprojects
    subprojects
    部分在项目层次结构中注入常见任务。看:这是我问题的答案,但我已经仔细研究了我试图做的事情,并决定这应该是它自己的任务。谢谢回答:)。