Apache Commons项目由三部分组成:
- Commons Proper - 可重用Java组件的存储库。
- Commons Sandbox - 用于Java组件开发的工作区。
- Commons Dormant - 当前不活动的组件库。
Commons Proper
Commons Proper致力于一个主要目标:创建和维护可重用的Java组件。
Commons Proper是一个协作和共享的场所,来自整个Apache社区的开发人员可以共同协作Apache项目和Apache用户共享的项目。
Commons开发人员将努力确保他们的组件对其他库具有最小的依赖性,以便可以轻松地部署这些组件。此外,Commons组件将使其接口尽可能保持稳定,以便Apache用户(包括其他Apache项目)可以实现这些组件,而无需担心将来的更改。
Commons Sandbox(沙箱)
Commons项目还包含一个对所有Apache提交者开放的工作空间。这是一个尝试新想法并准备包含在项目的Commons部分或另一个Apache项目中的地方。用户可以自由地试验沙箱中开发的组件,但不一定要维护沙箱组件,特别是在当前状态下。
Sandbox是Comversion提交者的Subversion存储库,可用作共享和协作的开放工作空间·
如果有一个明确的计划升级到Commons Proper并且有一个活跃的现有提交者组正在处理组件,则认为Sandbox组件是活动的。
如果最近几乎没有开发活动,并且没有出现任何个人或一组个人通勤者来支持Commons Proper的最终推广,Commons Sandbox组件被认为处于休眠状态。请参阅Commons 休眠组件 网页,以获取当前被认为处于休眠状态的Commons组件列表。
如果在持续的时间段内没有活动开发,则Commons Sandbox组件被视为无效。
Commons Dormant(休眠组件)
这些Commons组件被认为是不活跃的,因为他们最近几乎没有看到开发活动。如果您想使用这些组件中的任何一个,您必须自己构建它们。最好假设这些组件不会在不久的将来发布。
如果一个或多个提交者有兴趣获取组件的开发并致力于向Commons Proper的升级,则可以将Commons Dormant组件恢复到Commons Sandbox。
Guava 介绍
Guava项目包含在基于Java的项目中依赖的几个Google核心库:集合,缓存,基元支持,并发库,通用注释,字符串处理,I / O等。Google员工每天都会在生产服务中使用这些工具。
Guava的目标是使Java语言的工作更加愉快和高效。JDK实用程序(例如Collections API)已被广泛采用,并且几乎简化了所有Java代码。
Guava的Maven的 组ID是com.google.guava
工件ID是 guava
为什么使用GUAVA:
1、Guava已经在谷歌的生产中经过了严峻的考验。
2、番石榴的单元测试数量惊人:截至2012年7月,番石榴测试包中包含超过286,000个单独的测试用例。其中大部分是自动生成的,不是手工编写的,但是Guava的测试覆盖范围非常彻底,特别是对于com.google.common.collect。
3、Guava正在积极开发中,拥有强大,声音和参与的用户群。
Guava两种分类:
- JRE风格,需要JDK1.8或更高
- 如果您需要支持JDK 1.7或Android,请使用Android风格。可以在android目录中找到Android Guava源
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>27.1-jre</version>
<!-- or, for Android: -->
<version>27.1-android</version>
</dependency>
给guava用户的重要警告:
1、@Beta
在类或方法级别使用注释标记的API 可能会更改、甚至删除,使用Guava Beta Checker(可以通过MAVEN放的插件的方式使用)以确保您不使用任何@BetaAPI! https://github.com/google/guava-beta-checker
2、会在出现意外情况时(例如严重的安全问题)删除非@Beta API
,
21.0
时候出现过一次。
- maven中有一个com.google.guava:failureaccess:1.0 ,这个依赖单独提了一下
- 未来对象的序列化形式会有变化
- 不要恶意使用
- 仅在Linux上使用OpenJDK 1.8对库进行单元测试。某些功能(尤其是某些功能)com.google.common.io可能无法在其他环境中正常运行。对于Android风格,我们的单元测试在API级别15上运行。
Guava新增功能遵循的设计原则
当有疑问时,Guava添加功能方面保守一些。Guava位于底层的堆栈之中,在不破坏用户的情况下删除功能非常困难,因此我们倾向于推迟添加我们不确定的功能。(有时,将试用“Google内部”功能,可以自行将用户从故障功能迁移出去。)
Guava添加的功能是:
1、为您节省大量代码
2、避免强迫你编写难以调试的代码,或者容易出错
3、提高可读性
4、提高速度
Guava一般设计原则是:
1、如果我们不确定这是该工作可能的最佳API,请在我们确定之前再考虑一下。
2、方法和类的语义应该从其签名(signatures)中明显和直观,而不是“智能”。在特殊情况下,内部实现可以做聪明的事情,但这些特殊情况的语义应该是相同的。
3、在Guava用户中鼓励良好的代码习惯,并在Guava源代码中体现良好的代码习惯。(这有很多推论,包括“快速失败”,“拒绝无效”等。)
4、不要试图单独解决每个用例 - 提供可以组成的通用工具来解决我们还没有想到的用例。
5、强调可维护性,并为将来的重构留出空间。(推论:final根据Effective Java第17项,大多数暴露的类应该是暴露“骨架” AbstractXXX类应该非常保守地完成。)
Guava迭代
总结:Guava团队会删除原来代码,每个版本都会是最佳版本。
与JDK相比 - 即使出现最严重的错误,它仍保持极其严格的向后兼容性 - Guava不赞成,随着时间的推移删除不需要的功能。对我们来说很重要的是,当你在Javadocs中看到一个特征时,它代表了番石榴团队的最佳作品。
但是,我们确实努力确保我们不会肆意破坏用户。如果我们还没准备好某些特定组件的API,无论出于何种原因,我们都会将该组件标记为@Beta。有关这方面的更多细节如下。
Beta API
@ Beta API经过全面测试和支持,并受到了Guava其余部分所接受的所有关心和喜爱。
@Beta注释的最大内涵是带注释的类或方法可能会发生变化。它们可以随时以任何方式进行修改,甚至可以删除。若防止Guava删除,可以自己打包使用。
非Beta API
没有的API @Beta将无限期地保持二进制兼容。出现严重问题。会在出现意外情况时(例如严重的安全问题)删除非@Beta API,21.0时候出现过一次。