使用Map变量扩展sourceSet时,渐变奇怪的行为



我们正在开发一个Java项目,该项目能够在构建时插入(更改)类文件。我们定义了一个Gradle任务,它调用一个基于java的Ant任务,该任务接受一个inputDir(例如build/classes)和一个outputDir(例如build/calasses)以及可能的其他参数。编译后,将分别为主类文件和测试类文件调用该任务。由于"普通"的java sourceSet不太适合,我们的第一个想法是实现我们自己的sourceSet,但找不到简单的方法。一个合理的替代方案,类似于ANTLR等,似乎是额外的变量。由于我需要几张,我就去买了一张地图。

sourceSets.all { ext.instrumentation = [:] }
sourceSets.all {
    instrumentation.inputDir = null
    instrumentation.outputDir = null
    instrumentation.classPath = null
}
def postfix = '-instrumented'

下面您将看到我们如何初始化变量。

sourceSets {
    main {
        instrumentation.inputDir = sourceSets.main.output.classesDir
        instrumentation.outputDir = instrumentation.inputDir + postfix
        instrumentation.classPath = sourceSets.main.output + configurations.compile
    }
    test {
        instrumentation.inputDir = sourceSets.test.output.classesDir
        instrumentation.outputDir = instrumentation.inputDir + postfix
    }
}

然而,它失败了,因为"找不到参数[build_f2cvmoa3v4hnjefifhpuk6ira的方法main()"$_run_closure5_closure23@12a14b74]在根上项目"Continuations"。"

我们使用的是Gradle 2.1

我有以下问题:

  1. 知道为什么第一个失败了吗
  2. 额外的变量是解决问题的合理方案吗

非常感谢您的帮助

解决方案:安装最新版本。

我也遇到了同样的问题,我读了3级的成绩文件,但安装了2.7级。

  • 检查等级2.7
  • 然后阅读gradle 2.7文档https://docs.gradle.org/2.7/userguide/tutorial_java_projects.html#N103CD,但在该版本的java插件中没有找到关于sourceSet的信息
  • 已安装gradle 3->问题已解决

最新更新