# Google Best Practice For Java Libraries （JLBP-0）

> this is a chinese tranlation from `Google Best Practice For Java Libraries`

# Google Java库最佳实践

Google Java库的最佳实践是一些规则，旨在减少使用相关的Java库时的问题。这些实践来自于多年来维护开源Java库的经验，并且受到了从错误中吸取的许多宝贵教训的启发。我们发现遵循这些规则可以得到质量更高的Java库，减少依赖冲突和其他类型的问题。这个规则列表是开放的，所以可能会不时地添加新的规则。

## 最佳实践

* [JLBP-1](https://jlbp.dev/JLBP-1): 最小化依赖
    
* [JLBP-2](https://jlbp.dev/JLBP-2): 最小化 API 接口
    
* [JLBP-3](https://jlbp.dev/JLBP-3): 使用语义版本
    
* [JLBP-4](https://jlbp.dev/JLBP-4): 避免依赖不稳定的库或者特性
    
* [JLBP-5](https://jlbp.dev/JLBP-5): 不要将一个类包含在多个类路径条目中
    
* [JLBP-6](https://jlbp.dev/JLBP-6): 一起重命名构件和包
    
* [JLBP-7](https://jlbp.dev/JLBP-7): 使破坏性过渡变得容易
    
* [JLBP-8](https://jlbp.dev/JLBP-8): 将广泛使用的功能提升到稳定版本
    
* [JLBP-9](https://jlbp.dev/JLBP-9): 支持您的消费者的最低Java版本
    
* [JLBP-10](https://jlbp.dev/JLBP-10): 为了消费者的需要，保持API的稳定性
    
* [JLBP-11](https://jlbp.dev/JLBP-11): 保持依赖项的最新状态
    
* [JLBP-12](https://jlbp.dev/JLBP-12): 明确支持级别和API的稳定性
    
* [JLBP-13](https://jlbp.dev/JLBP-13): 在第一次机会中删除对依赖项中已弃用功能的引用
    
* [JLBP-14](https://jlbp.dev/JLBP-14): 指定每个依赖项的单个可覆盖版本
    
* [JLBP-15](https://jlbp.dev/JLBP-15): 为多模块项目发布BOM
    
* [JLBP-16](https://jlbp.dev/JLBP-16): 确保消费者的依赖项的上限版本对齐
    
* [JLBP-17](https://jlbp.dev/JLBP-17): 协调退出破坏性版本
    
* [JLBP-18](https://jlbp.dev/JLBP-18): 只把 shade 依赖作为最后手段
    
* [JLBP-19](https://jlbp.dev/JLBP-19): 每个包只在一个模块里
    
* [JLBP-20](https://jlbp.dev/JLBP-20): 给每个 jar 一个模块名
    
* [JLBP-21](https://jlbp.dev/JLBP-21): 把构件上传到 Maven 中央仓库
    
* [JLBP-22](https://jlbp.dev/JLBP-22): 声明所有的直接依赖
    

## 概念

* [什么是钻石依赖冲突？](https://jlbp.dev/what-is-a-diamond-dependency-conflict)
    
* [为什么编译器不能捕获钻石依赖冲突？](https://jlbp.dev/why-doesnt-the-compiler-catch-diamond-dependency-conficts)
    
* [Maven 和 Gradle 的版本解析是怎么工作的？](https://jlbp.dev/how-does-version-resolution-work-in-maven-and-gradle)
    
    ## 参考
    
* [术语表](https://jlbp.dev/glossary): 最佳实践中的术语以及其他开源云Java仓库中的术语
