有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Gradle子项目任务未获得pickedup

我有一个Java项目的多模块设置,结构如下

mainApp
|--> core-module
|       |--> src
|       |--> build.gradle
|       |--> gradle.properties
|       
|--> lib-module
|       |--> src
|       |--> build.gradle
|       |--> gradle.properties
|--> lib-another-module
|       |--> src
|       |--> build.gradle
|       |--> gradle.properties
|--> settings.gradle
|--> build.gradle

在我提到的

subprojects {
    test.dependsOn "CreateMessageKeys"
    //test.dependsOn ":CreateMessageKeys"
    //test.dependsOn ("CreateMessageKeys")
    //test.dependsOn (":CreateMessageKeys") none of this working....

}

task CreateMessageKeys(type: CreateMessageKeysTask) {
    destDir = "bundle-common/src/";
    outputClass = "common.messages.MessageKeys";
}

我的core-module/build.gradle有一个测试目标

test {
    useTestNG() { 
        useDefaultListeners = true
        suites 'test/testng.xml' 
    }
}

但得到的错误如下。。我错过了什么

Caused by: groovy.lang.MissingMethodException: No signature of method: java.lang.String.dependsOn() is applicable for argument types: (String) values: [CreateMessageKeys]
Possible solutions: respondsTo(java.lang.String)

编辑

subprojects {
    test.dependsOn(rootProject.tasks['CreateMessageKeys'])
}

task CreateMessageKeys(type: CreateMessageKeysTask) {
    destDir = "bundle-common/src/";
    outputClass = "common.messages.MessageKeys";
}

它会生成以下错误:

* What went wrong:
A problem occurred evaluating root project 'myApp'.
> Task with name 'CreateMessageKeys' not found in root project 'mainApp'.

共 (1) 个答案

  1. # 1 楼答案

    任务定义看起来不正确,请参见defining tasks

    应该是这样的:

    task ('CreateMessageKeys', type: CreateMessageKeysTask) {
        destDir = "bundle-common/src/";
        outputClass = "common.messages.MessageKeys";
    }
    

    或者

    task (CreateMessageKeys, type: CreateMessageKeysTask) {
        destDir = "bundle-common/src/";
        outputClass = "common.messages.MessageKeys";
    }
    

    与这个问题无关:

    在您的第二个示例中,在计算任务时,任务CreateMessageKeys可能还不存在。一种可能的解决方法是:

    subprojects.each {
        it.afterEvaluate {
             it.test.dependsOn(...)
        }
    }
    

    或者简单地把任务定义放在这个块上面就可以解决这个问题