如何通过Gradle任务获取运行时依赖Jar包列表以手动启动主类?
获取Gradle项目的运行时类路径(适配java -cp格式)
一、利用Application插件的内置配置
如果你已经应用了application插件,不用额外插件就能拿到符合要求的类路径:
- 先确保
build.gradle里声明了插件和主类:plugins { id 'application' } mainClassName = 'my.package.Main' // Groovy DSL // Kotlin DSL 写法:mainClass.set("my.package.Main") - 写个简单的自定义任务,直接输出适配
-cp格式的类路径字符串:
运行task printRuntimeClasspath { doLast { def classpath = sourceSets.main.runtimeClasspath.join(System.getProperty('path.separator')) println classpath } }gradle printRuntimeClasspath,输出的内容直接就能放到java -cp后面,已经包含项目自身Jar和所有运行时依赖。
二、无插件时的自定义任务
如果没用到application插件,同样可以基于runtimeClasspath配置实现:
task printClasspath { doLast { def runtimeClasspath = configurations.runtimeClasspath def classpathStr = runtimeClasspath.join(System.getProperty('path.separator')) println classpathStr } }
运行gradle printClasspath就能拿到结果,多模块项目要确保配置正确引用了模块间依赖。
三、第三方插件简化(可选)
嫌写自定义任务麻烦的话,可以用com.github.johnrengelman.shadow插件(主打打胖包,但也能方便获取类路径):
- 先应用插件:
plugins { id 'com.github.johnrengelman.shadow' version '7.1.2' } - 运行
gradle shadowClasspath,输出的类路径自动包含项目自身和所有依赖,格式直接适配-cp参数。
补充说明
- 不同操作系统路径分隔符自动适配:Windows用
;,Linux/macOS用:,任务里的System.getProperty('path.separator')会自动处理,不用手动修改。 - 要把类路径保存到文件的话,修改任务即可:
运行后项目根目录会生成task writeClasspathToFile { doLast { def classpath = sourceSets.main.runtimeClasspath.join(System.getProperty('path.separator')) new File(project.rootDir, 'classpath.txt').text = classpath } }classpath.txt,直接复制内容使用就行。
内容的提问来源于stack exchange,提问作者bluearth
相关产品推荐
相关产品推荐

