Gradle子项目任务未被检测到。

huangapple go评论98阅读模式
英文:

Gradle SubProject tasks are not getting picked-up

问题

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

  1. mainApp
  2. |---> core-module
  3. | |---> src
  4. | |---> build.gradle
  5. | |---> gradle.properties
  6. |
  7. |---> lib-module
  8. | |---> src
  9. | |---> build.gradle
  10. | |---> gradle.properties
  11. |---> lib-another-module
  12. | |---> src
  13. | |---> build.gradle
  14. | |---> gradle.properties
  15. |---> settings.gradle
  16. |---> build.gradle

mainApp/build.gradle 中,我提到了:

  1. subprojects {
  2. test.dependsOn "CreateMessageKeys"
  3. //test.dependsOn ":CreateMessageKeys"
  4. //test.dependsOn ("CreateMessageKeys")
  5. //test.dependsOn (":CreateMessageKeys") 这些都不起作用....
  6. }
  7. task CreateMessageKeys(type: CreateMessageKeysTask) {
  8. destDir = "bundle-common/src/";
  9. outputClass = "common.messages.MessageKeys";
  10. }

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

  1. test {
  2. useTestNG() {
  3. useDefaultListeners = true
  4. suites 'test/testng.xml'
  5. }
  6. }

但是会出现以下错误。我在这里漏掉了什么?

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

编辑

  1. subprojects {
  2. test.dependsOn(rootProject.tasks['CreateMessageKeys'])
  3. }
  4. task CreateMessageKeys(type: CreateMessageKeysTask) {
  5. destDir = "bundle-common/src/";
  6. outputClass = "common.messages.MessageKeys";
  7. }

它生成了以下错误:

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

I have a multi-module setup for a Java project with following structure.

  1. mainApp
  2. |--> core-module
  3. | |--> src
  4. | |--> build.gradle
  5. | |--> gradle.properties
  6. |
  7. |--> lib-module
  8. | |--> src
  9. | |--> build.gradle
  10. | |--> gradle.properties
  11. |--> lib-another-module
  12. | |--> src
  13. | |--> build.gradle
  14. | |--> gradle.properties
  15. |--> settings.gradle
  16. |--> build.gradle

in mainApp/build.gradle I've mentioned

  1. subprojects {
  2. test.dependsOn "CreateMessageKeys"
  3. //test.dependsOn ":CreateMessageKeys"
  4. //test.dependsOn ("CreateMessageKeys")
  5. //test.dependsOn (":CreateMessageKeys") none of this working....
  6. }
  7. task CreateMessageKeys(type: CreateMessageKeysTask) {
  8. destDir = "bundle-common/src/";
  9. outputClass = "common.messages.MessageKeys";
  10. }

and my core-module/build.gradle have a test target as

  1. test {
  2. useTestNG() {
  3. useDefaultListeners = true
  4. suites 'test/testng.xml'
  5. }
  6. }

but getting error as below.. What Am I missing here?

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

Edit

  1. subprojects {
  2. test.dependsOn(rootProject.tasks['CreateMessageKeys'])
  3. }
  4. task CreateMessageKeys(type: CreateMessageKeysTask) {
  5. destDir = "bundle-common/src/";
  6. outputClass = "common.messages.MessageKeys";
  7. }

It generates the error:

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

答案1

得分: 1

任务定义看起来不正确,请参阅定义任务

正确的写法如下:

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

或者

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

与本问题无关:

在你的第二个示例中,可能在评估时任务CreateMessageKeys尚不存在。一个可能的解决方法是:

  1. subprojects.each {
  2. it.afterEvaluate {
  3. it.test.dependsOn(...)
  4. }
  5. }

或者简单地将任务定义放在此代码块之前可能会解决这个问题。

英文:

The task definition does not look correct, see defining tasks.

It should look like this:

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

or

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

Irrelevant to this question:

In your second example, perhaps the task CreateMessageKeys does not exist yet when this is evaluated. One possible workaround would be the following:

  1. subprojects.each {
  2. it.afterEvaluate {
  3. it.test.dependsOn(...)
  4. }
  5. }

Or simply putting the task definition above this block could resolve this.

huangapple
  • 本文由 发表于 2020年8月17日 19:42:50
  • 转载请务必保留本文链接:https://go.coder-hub.com/63450111.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定