VSCode Java Gradle保存自动编译(快速)

在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)"
			}
		]
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值