如何在Gradle多项目中统一查找并配置指定类型任务?
嘿,这个场景我太熟了——多模块项目里重复配置任务确实挺烦的,其实Gradle早就给我们留了简洁的解决办法,不用分别给JavaExec和Test写两遍withType代码!
一步到位的统一配置方案
首先,先把要用来抑制非法反射警告的JVM参数抽成一个变量,后续修改或者扩展都更方便:
def reflectionFixJvmArgs = [ "--add-opens=java.base/java.lang=ALL-UNNAMED", "--add-opens=java.base/java.util=ALL-UNNAMED", // 按需添加你需要的其他参数 ]
接下来是核心操作:Gradle 5.0及以上版本的tasks.withType()方法支持传入任务类型数组,这样就能一次性匹配所有JavaExec和Test类型的任务,然后统一配置:
tasks.withType([JavaExec, Test]).configureEach { jvmArgs.addAll(reflectionFixJvmArgs) }
把这段代码放到根目录的build.gradle里,所有子模块的JavaExec(比如运行主类的任务)和Test(单元测试任务)都会自动继承这些JVM参数,完全不用逐个模块去配置。
特殊情况的例外处理
如果某个子模块里有个别任务不需要这些参数,也很容易覆盖:
// 在子模块的build.gradle里 tasks.named('specialTestTask') { // 移除统一配置的参数 jvmArgs.removeAll(reflectionFixJvmArgs) // 或者添加自定义参数 jvmArgs.add("--some-custom-arg") }
这样既实现了全局统一配置,又保留了灵活调整的空间,完美解决重复代码的问题~
内容的提问来源于stack exchange,提问作者binarycreations
相关产品推荐
相关产品推荐

