
本文旨在解决gradle多模块项目中,如何将主模块及其所有依赖打包成一个可独立运行的“胖jar”(fat jar)文件的问题。通过引入`com.github.johnrengelman.shadow`插件,并配置主类信息,我们可以轻松生成一个包含所有运行时依赖的jar包,从而实现`java -jar`命令的便捷执行,极大地简化了应用程序的部署与分发。
在Gradle项目中,尤其是在采用settings.gradle进行多模块管理的复杂结构中,将一个模块及其所有外部依赖打包成一个可独立运行的JAR文件(通常称为“胖JAR”或“Uber JAR”)是一个常见的需求。默认的jar任务只会打包当前模块的代码,并不会包含其依赖项。这意味着,如果直接运行默认生成的JAR包,应用程序将因缺少必要的库而报错。为了解决这个问题,我们需要一个专门的工具来聚合所有依赖。
核心解决方案:使用Gradle Shadow Jar插件
com.github.johnrengelman.shadow插件,通常被称为Shadow Jar插件,是Gradle生态系统中用于创建包含所有依赖的可执行JAR包的强大工具。它能够将项目及其所有依赖项(包括传递性依赖)打包到一个单一的JAR文件中,同时处理潜在的类名冲突(例如,不同依赖中包含同名文件的情况)。
步骤一:在主模块中应用Shadow Jar插件
立即进入“豆包AI人工智官网入口”;
立即学习“豆包AI人工智能在线问答入口”;
首先,你需要在希望生成可执行JAR包的主模块的build.gradle文件中应用Shadow Jar插件。请注意,settings.gradle主要用于定义项目结构和包含子模块,而具体的构建逻辑和插件应用则发生在各个模块的build.gradle文件中。
// 在你的主模块(例如,名为 'app' 的模块)的 build.gradle 文件中
plugins {
id 'java' // 确保应用了Java插件
id 'application' // 可选,但推荐,用于简化主类配置
id 'com.github.johnrengelman.shadow' version '7.1.2' // 应用Shadow Jar插件,请使用最新稳定版本
}
// ... 其他配置,如 group, version, repositories, dependencies 等
// 配置应用程序的主类
application {
// 定义应用程序的入口主类
mainClass = 'jaso92559.app.App' // 替换为你的实际主类路径
}
// 可选:显式配置JAR文件的Manifest,与application块功能有重叠,
// 但在某些情况下可能需要,例如当不使用application插件时。
jar {
manifest {
attributes "Main-Class": "jaso92559.app.App" // 替换为你的实际主类路径
}
}配置说明:
步骤二:执行Shadow Jar构建任务
在配置完成后,你可以在项目的根目录下(即settings.gradle文件所在的目录)打开命令行终端,执行Shadow Jar插件提供的构建任务:
./gradlew shadowJar
或者,如果你在Windows系统上:
gradlew shadowJar
Gradle将会编译你的代码,解析所有依赖,并将它们一并打包到一个新的JAR文件中。这个过程可能需要一些时间,具体取决于你的项目大小和依赖数量。
步骤三:定位并运行生成的JAR文件
构建成功后,生成的“胖JAR”文件通常位于主模块的build/libs目录下。它的命名规则通常是[模块名]-[版本号]-all.jar,例如app-all.jar。
你可以通过以下命令来运行它:
java -jar app/build/libs/app-all.jar
请将app/build/libs/app-all.jar替换为你的实际文件路径和名称。
注意事项与最佳实践:
通过遵循上述步骤和最佳实践,你可以有效地使用Gradle Shadow Jar插件,为你的Java应用程序创建可独立运行、包含所有依赖的JAR包,从而简化应用程序的部署和分发流程。
以上就是使用Gradle Shadow Jar插件构建包含所有依赖的可执行JAR包的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号