使用Map变量扩展sourceSets时发生奇怪的行为

时间:2014-09-16 19:21:42

标签: java gradle

我们正在开发一个能够在构建时检测(更改)类文件的Java项目。我们定义了一个Gradle任务,它调用一个基于java的Ant任务,该任务接受inputDir(例如build / classes)和outputDir(例如build / classes-instrumented)和可能的其他参数。编译后,为main和test类文件单独调用该任务。由于“普通”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
    }
}

然而它失败了“找不到方法main()参数[build_f2cvmoa3v4hnjefifhpuk6ira $ _run_closure5_closure23 @ 12a14b74]在root上 项目'Continuations'。“

我们正在使用Gradle 2.1

我有以下问题:

  1. 任何想法为什么第一个失败?
  2. 额外变量是解决问题的合理解决方案吗?
  3. 非常感谢你的帮助

1 个答案:

答案 0 :(得分:0)

解决方案:安装上一版本。

我遇到了同样的问题,我阅读了gradle 3的gradle文档,但是安装了gradle 2.7。

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