🤗 ApiHug × {Postman|Swagger|Api...} = 快↑ 准√ 省↓
- GitHub - apihug/apihug.com: All abou the Apihug
- apihug.com: 有爱,有温度,有质量,有信任
- ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace
ApiHug 整个工具链基于 Gradle, 使用 ApiHug 准备工作最先需要学习的就是 gradle. 工欲善其事,必先利其器
开箱即用,是对开发友好同理心最好表现
Spring Boot 提供整个工具链能够将开发者尽快带入角色, ApiHug 也是, 在 IDEA 分钟级开启新项目。
ApiHug101-001开启篇
fat
jar (也叫 uber-jar) 一个自包含JAR也就是 classes + dependencies 集合体, 可以直接运行的 application。 注意这个有别于 spring boot
。
下面我们用另种方式, 一个是纯jar 自带的方法, 一个是用shadow 插件。
#初始化
gradle init
(7.0+ 版本), 初始化一个最最简单的项目:
plugins {
id 'java'
id "com.github.johnrengelman.shadow" version "7.1.2"
}
dependencies {
implementation 'org.slf4j:slf4j-api:1.7.36'
implementation 'org.slf4j:slf4j-simple:1.7.36'
compileOnly 'it.unimi.dsi:fastutil:8.2.1' // this must not be in the jar
// Use JUnit Jupiter for testing.
testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1'
// This dependency is used by the application.
//implementation 'com.google.guava:guava:30.1.1-jre'
}
tasks.named('test') {
useJUnitPlatform()
}
注意 slf4j
是 implementation
, 而另外一个是 compileOnly
。
#Java 插件里的 Jar 任务
默认的 java 插件自带 jar
任务 java plugin - tasksopen in new window。
jar {
manifest {
attributes "Main-Class": "com.dearxue.fatjar.Application"
}
from {
configurations.compileClasspath.findAll { it.name.endsWith('jar') }.collect { zipTree(it) }
}
}
默认情况下jar 是不带依赖打包的, 我们定制两个:
- manifest 里的 Main-Class, 也就是我们的入口函数
- 包含依赖包
#独立一个任务
task customFatJar(type: Jar) {
manifest {
attributes 'Main-Class': 'com.dearxue.fatjar.Application'
baseName = 'all-in-one-jar'
from { configurations.compileClasspath.findAll { it.name.endsWith('jar') }.collect { zipTree(it) } }
with jar
duplicatesStrategy = 'include'
}
定制一个 customFatJar
以和默认的 jar
任务区分。
#使用 shadow
shadow pluginopen in new window。
Shadow tasks
------------
knows - Do you know who knows?
shadowJar - Create a combined JAR of project and runtime dependencies
shadowJar {
archiveBaseName.set('shadow')
archiveClassifier.set('')
archiveVersion.set('')
}
#结论
这几种方式操作下来我们可以看到编译的结果 build/libs
:
+---libs
| all-in-one-jar.jar
| gradle-fat-jar.jar
| shadow.jar
2022/07/22 16:33 37,362,395 all-in-one-jar.jar
2022/07/22 16:32 18,683,286 gradle-fat-jar.jar
2022/07/22 16:31 56,212 shadow.jar
直接运行:
\build\libs>java -jar shadow.jar
[main] INFO com.dearxue.fatjar.Application - Hello at dearxue!
never changed dearxue
咱们自己build 出来的比shadow 要大点点, 因为我们没有区分 implementation
vs compileOnly
导致 it.unimi.dsi:fastutil:8.2.1
也被包含在最终的jar 包里面。
项目变得复杂后, 还是依赖专业的 shadow pluginopen in new window 来解决问题, 包括冲突,还有依赖的选择等等。
项目地址 gradle-fat-jar