为什么Gradle总是首先调用ant任务?

时间:2014-11-12 20:42:24

标签: ant gradle

我使用其ant任务中的OWASP依赖关系检查(还没有Gradle支持),如下所示:

task checkDependencies() {
    ant.taskdef(name: 'checkDependencies',
        classname: 'org.owasp.dependencycheck.taskdefs.DependencyCheckTask',
        classpath: 'scripts/dependency-check-ant-1.2.5.jar')
    ant.checkDependencies(applicationname: "MyProject",
        reportoutputdirectory: "generated",
        dataDirectory: "generated/dependency-check-cache") {
        fileset(dir: 'WebContent/WEB-INF/lib') {
            include(name: '**.jar')
        }
    }
}

这样做太好了。即使没有将此ant任务定义为依赖项(无论是在ant还是在Gradle中),它始终首先执行,即使对于简单的gradlew tasks也是如此。为什么这样,我怎么能避免这种情况? (依赖性检查非常慢。)

1 个答案:

答案 0 :(得分:2)

这是与Gradle的非常常见的混淆。在上面的示例中,您将在项目配置期间执行Ant任务。您真正想要的是在任务执行期间运行它。要解决此问题,您的执行逻辑应放在任务操作中,方法是使用doLast {...}配置块或使用左移(<<)运算符。

task checkDependencies << {
    // put your execution logic here
}

有关Gradle构建生命周期的详细信息,请参阅Gradle docs