如何将IntelliJ中Gradle构建的Java项目打Jar包并作为库引入其他项目
将Gradle Java项目打包为Jar并作为依赖引入
一、配置Gradle打包任务(可选但推荐)
Gradle的Java插件自带jar任务,你可以根据需求调整配置:
仅打包自身代码(不含依赖)
在项目的build.gradle(Groovy)或build.gradle.kts(Kotlin)里添加以下配置,自定义Jar的名称、版本和输出路径:// Groovy DSL jar { archiveBaseName.set("my-library") // Jar名称 archiveVersion.set("1.0.0") // 版本号 destinationDirectory.set(file("$projectDir/build/libs")) // 默认输出路径,可自行修改 }// Kotlin DSL tasks.jar { archiveBaseName.set("my-library") archiveVersion.set("1.0.0") destinationDirectory.set(file("$projectDir/build/libs")) }打包包含所有依赖的Fat Jar
如果你的项目依赖了其他库,想把所有依赖打包到同一个Jar里,用shadowJar插件:- 先在
build.gradle中引入插件:// Groovy DSL plugins { id 'java' id 'com.github.johnrengelman.shadow' version '8.1.1' // 版本可根据Gradle版本调整 } - 配置
shadowJar任务:shadowJar { archiveBaseName.set("my-library-fat") archiveVersion.set("1.0.0") mergeServiceFiles() // 合并SPI等服务文件,避免冲突 }
- 先在
二、生成Jar文件
IntelliJ图形界面操作
- 打开右侧的Gradle面板,找到你的项目
- 展开
Tasks->build(用shadow插件的话找shadow) - 双击
jar(或shadowJar)任务,等待执行完成 - 生成的Jar文件会在
项目根目录/build/libs/下,找到对应的文件即可
命令行操作
直接在项目根目录执行:
./gradlew jar # 生成普通Jar # 或者 ./gradlew shadowJar # 生成Fat Jar
三、在另一个项目中引入Jar依赖
方式1:本地文件依赖(快速测试用)
把生成的Jar复制到另一个项目的某个目录(比如新建libs文件夹),然后在该项目的build.gradle中添加:
// Groovy DSL dependencies { implementation files('libs/my-library-1.0.0.jar') // 用Fat Jar的话替换成对应的文件名 }
// Kotlin DSL dependencies { implementation(files("libs/my-library-1.0.0.jar")) }
也可以直接用绝对路径引用Jar,不过相对路径更方便。
方式2:本地Maven仓库(长期使用更规范)
把Jar发布到本地Maven仓库,就能像普通第三方依赖一样引用:
- 在原项目的
build.gradle中添加Maven发布配置:// Groovy DSL plugins { id 'java' id 'maven-publish' } publishing { publications { maven(MavenPublication) { from components.java groupId = 'com.yourcompany' // 自定义你的groupId,比如公司域名 artifactId = 'my-library' // 自定义artifactId version = '1.0.0' // 版本号 } } repositories { mavenLocal() // 发布到本地Maven仓库 } } - 执行发布任务:在Gradle面板找到
Tasks->publishing->publishToMavenLocal双击执行,或者命令行:./gradlew publishToMavenLocal - 在另一个项目的
build.gradle中添加依赖:// Groovy DSL dependencies { implementation 'com.yourcompany:my-library:1.0.0' }// Kotlin DSL dependencies { implementation("com.yourcompany:my-library:1.0.0") }
内容的提问来源于stack exchange,提问作者Tutu
相关产品推荐
相关产品推荐

