我们正在开发一个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
我有以下问题:
- 知道为什么第一个失败了吗
- 额外的变量是解决问题的合理方案吗
非常感谢您的帮助
解决方案:安装最新版本。
我也遇到了同样的问题,我读了3级的成绩文件,但安装了2.7级。
- 检查等级2.7
- 然后阅读gradle 2.7文档
https://docs.gradle.org/2.7/userguide/tutorial_java_projects.html#N103CD
,但在该版本的java插件中没有找到关于sourceSet的信息 - 已安装gradle 3->问题已解决