如何配置build.gradle使./gradlew build自动执行指定终端命令
JavaCC 项目 Gradle 自动构建配置方案
下面直接给出完整配置,只需替换对应参数即可实现执行./gradlew build时自动运行 javacc 生成代码、编译Java文件、执行解析器三个步骤。
完整build.gradle配置(Groovy语法)
plugins { id 'java' } // ========== 请替换为你项目的实际参数 ========== // .jj文件的文件名 def jjFileName = "filename.jj" // 解析器的主类名 def parserClassName = "parsername" // 存放.jj文件的目录,这里默认放在项目根目录的javacc文件夹下 def jjSourceDir = file("javacc") // javacc生成的Java代码存放目录 def generatedJavaDir = file("build/generated-sources/javacc") // ============================================== repositories { mavenCentral() } dependencies { // 引入javacc依赖,无需本地预安装javacc implementation 'net.java.dev.javacc:javacc:7.0.13' } // 任务1:调用javacc生成Java代码 task generateJavaFromJavacc(type: JavaExec) { doFirst { generatedJavaDir.mkdirs() } classpath = configurations.runtimeClasspath mainClass = 'javacc' args "${jjSourceDir}/${jjFileName}", "-OUTPUT_DIRECTORY=${generatedJavaDir}" } // 将生成的Java代码加入编译源路径 sourceSets { main { java { srcDir generatedJavaDir } } } // 编译Java任务依赖代码生成任务,保证生成代码后再编译 compileJava.dependsOn generateJavaFromJavacc // 任务2:执行编译后的解析器 task runParser(type: JavaExec) { dependsOn compileJava classpath = sourceSets.main.output mainClass = parserClassName // 若解析器需要传参,可取消下面注释替换为实际参数 // args "param1", "param2" } // 把解析器运行任务绑定到build生命周期,执行build时自动运行所有步骤 build.dependsOn runParser
注意事项
- 你需要将自己的.jj文件放到配置中
jjSourceDir指定的目录下,默认是项目根目录的javacc文件夹 - 如果你的本地已经预安装了javacc且不想通过依赖引入,可以把
generateJavaFromJavacc任务替换为Exec类型,直接调用本地javacc命令即可 - 如果需要调整javacc的生成参数,可以在
generateJavaFromJavacc任务的args中添加对应参数,比如设置静态分析、语法检查等级等
内容的提问来源于stack exchange,提问作者Nikita Fernando
相关产品推荐
相关产品推荐

