在VSCode中开发Java Gradle项目时,好像不会保存后自动编译。你必须手动或通过设置或插件来执行Gradle compile或build任务,这样是没问题,但很慢。有时候,比如在一边测试一边开发的时候,我们希望保存一个文件就及时编译,但不希望跑一次相对”很重“的Gradle task.
我们可以这样做:
1,在build.gradle中创建一个task来生成我们自己的classpath 文件。我的假设前提是我们的项目依赖是不会太频繁变化的,即使变化了,跑一下build任务即可。
task generateClasspath {
doLast {
def classpathFile = file("${buildDir}/myclasspath")
def compileClasspath = sourceSets.main.compileClasspath
def outputClassesDirs = sourceSets.main.output.classesDirs
def compileTestClasspath = sourceSets.test.compileClasspath
def outputTestClassesDirs = sourceSets.test.output.classesDirs
def filteredClasspath = files(compileClasspath.files.findAll { it != null }
+ outputClassesDirs.files.findAll { it != null }
+compileTestClasspath.files.findAll { it != null }
+ outputTestClassesDirs.files.findAll { it != null }).asPath
classpathFile.text = filteredClasspath
println "Generated myclasspath file: ${classpathFile.path}"
}
}
tasks.build.dependsOn generateClasspath
2, 安装VSCode插件Run on save, 并在VSCode的配置文件做如下配置。当然我的项目比较简单,你们可以根据自己的需求修改。
"emeraldwalk.runonsave": {
"commands": [
{
"match": "src\\\\main\\\\java\\\\.+\\.java$",
"isAsync": true,
"cmd": "cd ${workspaceFolder} && IF EXIST \"build\\myclasspath\" (javac -cp @build\\myclasspath ${file} -d build/classes/java/main)"
},
{
"match": "src\\\\main\\\\resources\\\\.*",
"isAsync": true,
"cmd": "cd ${workspaceFolder} && IF EXIST \"build.gradle\" (gradle processResources)"
},
{
"match": "src\\\\test\\\\java\\\\.+\\.java$",
"isAsync": true,
"cmd": "cd ${workspaceFolder} && IF EXIST \"build\\myclasspath\" (javac -cp @build\\myclasspath ${file} -d build/classes/java/test)"
},
{
"match": "src\\\\test\\\\resources\\\\.*",
"isAsync": true,
"cmd": "cd ${workspaceFolder} && IF EXIST \"build.gradle\" (gradle processTestResources)"
}
]
}
1613

被折叠的 条评论
为什么被折叠?



