gradle:插件任务 `dependsOn` 另一个插件任务时失败

标签 gradle gretty

测试 gradle 作为 maven 的替代品,我们有一个 build.gradle 文件,其中包含以下插件

buildscript {
    repositories {
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath "com.moowork.gradle:gradle-grunt-plugin:0.6"
        classpath 'org.akhikhl.gretty:gretty:+'
    }
}

apply plugin: 'scala'
apply plugin: "com.moowork.grunt"
apply plugin: 'war'
apply plugin: 'org.akhikhl.gretty'
./gradlew appStart./gradlew grunt_dev从控制台运行良好。

但是在添加行时
appStart.dependsOn grunt_dev
到脚本,./gradlew appStart失败
Could not find property 'appStart' on root project 'blah'.
为什么是appStart任务从 gradle 包装器可见而不是在脚本中?

gretty appStart 上的文档

更新

按照下面的@Opal 解释,以下内容允许将任务连接在一起
//Tasks defined in plugins are added after all projects are evaluated
//We have to hook after the evaluation to prevent an evaluation failure
project.afterEvaluate {
    project.tasks.appStart.dependsOn grunt_dev
}

最佳答案

当以下代码添加到build.gradle :
project.tasks.each { println it.name }
可以看出appStart不在列表中。为什么?可能在申请时没有创建任务 'org.akhikhl.gretty' (构建脚本评估)但稍后,在运行时。

稍后会尝试检查。

编辑

here是解释。在评估所有项目后添加 grtty 插件中定义的任务(阅读关于 gradle 的生命周期)。这段代码(在 GrettyPlugin.groovy 的最后)负责这种行为:

project.afterEvaluate {
  addRepositories(project)
  addDependencies(project)
  addTasks(project)
  afterAfterEvaluate(project)
}

关于gradle:插件任务 `dependsOn` 另一个插件任务时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28086655/

相关文章:

gradle - 对于gradle任务 “execute”的含义感到困惑

android-studio - Android Studio Gradle 超时错误

java - Jetty JNDI资源失败: "java.lang.ClassNotFoundException: oracle.jdbc.pool.OracleDataSource"

gradle - 大量静态资源重载问题

gradle - 将其他源集添加到 Gretty 类路径

java - $ 不被识别为内部或外部命令

android - 错误 :Unknown host services. gradle.org。您可能需要调整 Gradle 中的代理设置

spring - 为什么Gretty慢?

gradle - Gretty:如何指定war文件的路径?

gradle - 如何从Web应用程序或任何Java API发送gradle任务指令