如何基于settings.gradle构建含依赖的可运行Jar包?
实现方案
先说明白:settings.gradle主要用来定义项目的模块结构(比如用include添加子模块),它本身没法直接写Jar的构建逻辑——构建任务的配置还是得靠build.gradle,但你可以通过settings.gradle统一给所有子模块注入Jar构建的规则,相当于从settings层面管理Jar的生成。
具体步骤
1. 确认你的settings.gradle模块配置
假设你的settings.gradle已经有模块声明,比如:
rootProject.name = 'TrendAnalyzer' include ':core' // 替换成你实际的子模块名
2. 在settings.gradle中统一注入Jar构建配置
在settings.gradle的末尾添加以下代码,自动给所有子模块(或指定模块)配置Jar生成规则:
// 在settings.gradle最后添加 gradle.settingsEvaluated { subprojects { subproject -> subproject.plugins.apply('java') subproject.tasks.named('jar') { jarTask -> // 设置主类路径,对应你要运行的trend_detect.Main manifest { attributes 'Main-Class': 'trend_detect.Main' } // 若需要将所有依赖打包进Jar(生成可执行Jar)则保留这段;不需要则删除 from { subproject.configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } // 设置输出的Jar文件名,即你需要的TrendAnalyzer.jar archiveFileName.set('TrendAnalyzer.jar') // 可选:指定Jar输出目录,默认在子模块的build/libs下,这里统一到根项目的build/libs destinationDirectory.set(file("$rootProject.buildDir/libs")) } } }
3. 生成Jar并测试运行
- 执行Gradle命令构建Jar:
# Linux/Mac环境 ./gradlew jar # Windows环境 gradlew jar
- 运行生成的Jar:
java -cp ./build/libs/TrendAnalyzer.jar trend_detect.Main
额外说明
- 若仅需给特定模块配置Jar,把
subprojects替换为project(':core')(将:core改为你的目标模块名)即可。 - 若不需要打包依赖进Jar,仅保留
manifest部分配置即可,运行时需将依赖Jar也加入classpath。
内容的提问来源于stack exchange,提问作者Lamron
相关产品推荐
相关产品推荐

