ant - 为什么Gradle总是总是先调用一个Ant任务?

标签 ant gradle

我从其ant任务(尚未提供Gradle支持)中使用OWASP Dependency Check,如下所示:

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。为什么会这样,我该如何避免呢? (依赖检查非常慢。)

最佳答案

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

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

有关Gradle构建生命周期的更多信息,请参见Gradle docs

关于ant - 为什么Gradle总是总是先调用一个Ant任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26896163/

相关文章:

java - 将 JaCoCo 添加到 Ivy?

if-statement - Gradle如何有条件地包含文件?

Java, Ant 错误 : unmappable character for encoding Cp1252

android build.gradle 模块应用程序错误 : Failed to resolve: annotation

android-maven-plugin 工作得很好为什么要迁移到 gradle? (适用于 Android 项目)

gradle - 无法将 'String' 分配给 'T'

android - 无法同步 Gradle 项目 "Application name"

java - 使用 ant 和 Jenkins 发起 war 时出现问题

调用 ant 目标时出现 java.util.zip.ZipException 错误

ant - 从包含/导入的项目中检索属性值