(附加一个官网打包可执行jar文件地址:https://docs.gradle.org/current/userguide/building_java_projects.html#sec:java_packaging
,要打包可执行文件需添加manifest和Main-Class)
依赖情况
dependencies {
testImplementation group: 'junit', name: 'junit', version: '4.12'
implementation('io.netty:netty-all:4.1.43.Final')
implementation("com.google.guava:guava:28.1-jre")
}
在根项目的build.gradle中,添加如下代码
jar {
//详细信息参考 https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html
archivesBaseName = 'MiniRPC'//基本的文件名
archiveVersion = '0.0.3' //版本
manifest { //配置jar文件的manifest
attributes(
"Manifest-Version": 1.0,
'Main-Class': 'com.mirs.minirpc.App' //指定main方法所在的文件
)
}
//打包依赖包
from {
(configurations.runtimeClasspath).collect {
it.isDirectory() ? it : zipTree(it)
}
}
}
这里踩了个坑,网上绝大多数文章在打包依赖的时候都是使用的configurations.runtime。使用compile引入的依赖,使用这种方式可以打包,但对于implementation引入的依赖,要使用configurations.runtimeClasspath才能把依赖打包进去。无论compile还是implementation引入依赖,configurations.runtimeClasspath都可以打包依赖。
此外对于testImplementation引入的依赖,则使用configurations.testRuntimeClasspath。
(参考文章 https://www.zhuyanbin.com/?p=654)
打包后的jar文件
运行结果