如何在Gradle执行run任务启动Java应用时配置显示启动闪屏
问题说明
启动Java应用时,之前通过如下Ant target配置实现启动闪屏展示:
<target name="default" description="run program via classpath"> <echo message="var.distribute.version.type=${var.distribute.version.type}" /> <ac:switch value="${var.distribute.version.type}"> <ac:case value="${prop.distribute.version.lite}"> <ac:runtarget target="compile-lite" /> </ac:case> <ac:case value="${prop.distribute.version.pro}"> <ac:runtarget target="compile-pro" /> </ac:case> </ac:switch> <echo>Running with classpath=${toString:run.classpath}</echo> <java classname="${main.class}" fork="true"> <jvmarg value="-splash:${images.dir}/splash.png" /> <classpath refid="run.classpath" /> </java> </target>
上述Ant配置可以正常生效,现在需要在Gradle中实现同等的启动闪屏效果,当前通过gradle run命令启动Java应用,需要完成对应配置。
实现方法
gradle run对应的是application插件提供的JavaExec类型任务,直接给这个任务传入和Ant配置一致的JVM闪屏参数即可,配置逻辑和原Ant完全对齐:
- 首先确认项目已引入
application插件(支持run任务的必要插件) - 配置主类全限定名,对应Ant配置里的
${main.class} - 给
run任务添加-splashJVM参数,指向闪屏文件的路径,和Ant里的jvmarg配置一致
Groovy DSL 配置(常规build.gradle格式)
把下面的配置加到项目的build.gradle文件中,替换掉注释里标注的自定义路径和主类名即可:
plugins { id 'java' id 'application' } // 替换为你自己的项目主类全限定名 application { mainClass = 'com.example.YourMainClass' } // 替换为你实际存放splash.png的目录路径 def imagesDir = file("path/to/your/images/dir") tasks.named('run') { // 传入闪屏JVM参数,用绝对路径避免工作目录差异导致找不到文件 jvmArgs "-splash:${imagesDir.absolutePath}/splash.png" }
Kotlin DSL 配置(build.gradle.kts格式)
如果你的项目用的是Kotlin格式的Gradle配置,用下面的写法:
plugins { java application } application { // 替换为你自己的项目主类全限定名 mainClass.set("com.example.YourMainClass") } // 替换为你实际存放splash.png的目录路径 val imagesDir = file("path/to/your/images/dir") tasks.named<JavaExec>("run") { jvmArgs("-splash:${imagesDir.absolutePath}/splash.png") }
配置完成后直接执行gradle run启动应用,就能看到和原Ant配置一致的闪屏效果。
注意:不要直接写相对路径指向splash.png,Gradle执行run任务时的工作目录默认是项目根目录,直接拼接相对路径很容易因为目录层级不对找不到闪屏文件,用文件对象取绝对路径的写法最稳妥。
内容的提问来源于stack exchange,提问作者Alexei
相关产品推荐
相关产品推荐

