You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 17:46:02