1*fb508042SAndroid Build Coastguard Worker# Guava: Google Core Libraries for Java 2*fb508042SAndroid Build Coastguard Worker 3*fb508042SAndroid Build Coastguard Worker[](https://github.com/google/guava/releases/latest) 4*fb508042SAndroid Build Coastguard Worker[](https://github.com/google/guava/actions) 5*fb508042SAndroid Build Coastguard Worker[](https://bestpractices.coreinfrastructure.org/projects/7197) 6*fb508042SAndroid Build Coastguard Worker 7*fb508042SAndroid Build Coastguard Worker 8*fb508042SAndroid Build Coastguard Worker 9*fb508042SAndroid Build Coastguard WorkerGuava is a set of core Java libraries from Google that includes new collection 10*fb508042SAndroid Build Coastguard Workertypes (such as multimap and multiset), immutable collections, a graph library, 11*fb508042SAndroid Build Coastguard Workerand utilities for concurrency, I/O, hashing, primitives, strings, and more! It 12*fb508042SAndroid Build Coastguard Workeris widely used on most Java projects within Google, and widely used by many 13*fb508042SAndroid Build Coastguard Workerother companies as well. 14*fb508042SAndroid Build Coastguard Worker 15*fb508042SAndroid Build Coastguard Worker 16*fb508042SAndroid Build Coastguard Worker 17*fb508042SAndroid Build Coastguard WorkerGuava comes in two flavors: 18*fb508042SAndroid Build Coastguard Worker 19*fb508042SAndroid Build Coastguard Worker* The JRE flavor requires JDK 1.8 or higher. 20*fb508042SAndroid Build Coastguard Worker* If you need support for Android, use 21*fb508042SAndroid Build Coastguard Worker [the Android flavor](https://github.com/google/guava/wiki/Android). You can 22*fb508042SAndroid Build Coastguard Worker find the Android Guava source in the [`android` directory]. 23*fb508042SAndroid Build Coastguard Worker 24*fb508042SAndroid Build Coastguard Worker[`android` directory]: https://github.com/google/guava/tree/master/android 25*fb508042SAndroid Build Coastguard Worker 26*fb508042SAndroid Build Coastguard Worker## Adding Guava to your build 27*fb508042SAndroid Build Coastguard Worker 28*fb508042SAndroid Build Coastguard WorkerGuava's Maven group ID is `com.google.guava`, and its artifact ID is `guava`. 29*fb508042SAndroid Build Coastguard WorkerGuava provides two different "flavors": one for use on a (Java 8+) JRE and one 30*fb508042SAndroid Build Coastguard Workerfor use on Android or by any library that wants to be compatible with Android. 31*fb508042SAndroid Build Coastguard WorkerThese flavors are specified in the Maven version field as either `33.3.0-jre` or 32*fb508042SAndroid Build Coastguard Worker`33.3.0-android`. For more about depending on Guava, see 33*fb508042SAndroid Build Coastguard Worker[using Guava in your build]. 34*fb508042SAndroid Build Coastguard Worker 35*fb508042SAndroid Build Coastguard WorkerTo add a dependency on Guava using Maven, use the following: 36*fb508042SAndroid Build Coastguard Worker 37*fb508042SAndroid Build Coastguard Worker```xml 38*fb508042SAndroid Build Coastguard Worker<dependency> 39*fb508042SAndroid Build Coastguard Worker <groupId>com.google.guava</groupId> 40*fb508042SAndroid Build Coastguard Worker <artifactId>guava</artifactId> 41*fb508042SAndroid Build Coastguard Worker <version>33.3.0-jre</version> 42*fb508042SAndroid Build Coastguard Worker <!-- or, for Android: --> 43*fb508042SAndroid Build Coastguard Worker <version>33.3.0-android</version> 44*fb508042SAndroid Build Coastguard Worker</dependency> 45*fb508042SAndroid Build Coastguard Worker``` 46*fb508042SAndroid Build Coastguard Worker 47*fb508042SAndroid Build Coastguard WorkerTo add a dependency using Gradle: 48*fb508042SAndroid Build Coastguard Worker 49*fb508042SAndroid Build Coastguard Worker```gradle 50*fb508042SAndroid Build Coastguard Workerdependencies { 51*fb508042SAndroid Build Coastguard Worker // Pick one: 52*fb508042SAndroid Build Coastguard Worker 53*fb508042SAndroid Build Coastguard Worker // 1. Use Guava in your implementation only: 54*fb508042SAndroid Build Coastguard Worker implementation("com.google.guava:guava:33.3.0-jre") 55*fb508042SAndroid Build Coastguard Worker 56*fb508042SAndroid Build Coastguard Worker // 2. Use Guava types in your public API: 57*fb508042SAndroid Build Coastguard Worker api("com.google.guava:guava:33.3.0-jre") 58*fb508042SAndroid Build Coastguard Worker 59*fb508042SAndroid Build Coastguard Worker // 3. Android - Use Guava in your implementation only: 60*fb508042SAndroid Build Coastguard Worker implementation("com.google.guava:guava:33.3.0-android") 61*fb508042SAndroid Build Coastguard Worker 62*fb508042SAndroid Build Coastguard Worker // 4. Android - Use Guava types in your public API: 63*fb508042SAndroid Build Coastguard Worker api("com.google.guava:guava:33.3.0-android") 64*fb508042SAndroid Build Coastguard Worker} 65*fb508042SAndroid Build Coastguard Worker``` 66*fb508042SAndroid Build Coastguard Worker 67*fb508042SAndroid Build Coastguard WorkerFor more information on when to use `api` and when to use `implementation`, 68*fb508042SAndroid Build Coastguard Workerconsult the 69*fb508042SAndroid Build Coastguard Worker[Gradle documentation on API and implementation separation](https://docs.gradle.org/current/userguide/java_library_plugin.html#sec:java_library_separation). 70*fb508042SAndroid Build Coastguard Worker 71*fb508042SAndroid Build Coastguard Worker## Snapshots and Documentation 72*fb508042SAndroid Build Coastguard Worker 73*fb508042SAndroid Build Coastguard WorkerSnapshots of Guava built from the `master` branch are available through Maven 74*fb508042SAndroid Build Coastguard Workerusing version `HEAD-jre-SNAPSHOT`, or `HEAD-android-SNAPSHOT` for the Android 75*fb508042SAndroid Build Coastguard Workerflavor. 76*fb508042SAndroid Build Coastguard Worker 77*fb508042SAndroid Build Coastguard Worker- Snapshot API Docs: [guava][guava-snapshot-api-docs] 78*fb508042SAndroid Build Coastguard Worker- Snapshot API Diffs: [guava][guava-snapshot-api-diffs] 79*fb508042SAndroid Build Coastguard Worker 80*fb508042SAndroid Build Coastguard Worker## Learn about Guava 81*fb508042SAndroid Build Coastguard Worker 82*fb508042SAndroid Build Coastguard Worker- Our users' guide, [Guava Explained] 83*fb508042SAndroid Build Coastguard Worker- [A nice collection](https://www.tfnico.com/presentations/google-guava) of 84*fb508042SAndroid Build Coastguard Worker other helpful links 85*fb508042SAndroid Build Coastguard Worker 86*fb508042SAndroid Build Coastguard Worker## Links 87*fb508042SAndroid Build Coastguard Worker 88*fb508042SAndroid Build Coastguard Worker- [GitHub project](https://github.com/google/guava) 89*fb508042SAndroid Build Coastguard Worker- [Issue tracker: Report a defect or feature request](https://github.com/google/guava/issues/new) 90*fb508042SAndroid Build Coastguard Worker- [StackOverflow: Ask "how-to" and "why-didn't-it-work" questions](https://stackoverflow.com/questions/ask?tags=guava+java) 91*fb508042SAndroid Build Coastguard Worker- [guava-announce: Announcements of releases and upcoming significant changes](https://groups.google.com/group/guava-announce) 92*fb508042SAndroid Build Coastguard Worker- [guava-discuss: For open-ended questions and discussion](https://groups.google.com/group/guava-discuss) 93*fb508042SAndroid Build Coastguard Worker 94*fb508042SAndroid Build Coastguard Worker## IMPORTANT WARNINGS 95*fb508042SAndroid Build Coastguard Worker 96*fb508042SAndroid Build Coastguard Worker1. APIs marked with the `@Beta` annotation at the class or method level are 97*fb508042SAndroid Build Coastguard Worker subject to change. They can be modified in any way, or even removed, at any 98*fb508042SAndroid Build Coastguard Worker time. If your code is a library itself (i.e., it is used on the CLASSPATH of 99*fb508042SAndroid Build Coastguard Worker users outside your own control), you should not use beta APIs unless you 100*fb508042SAndroid Build Coastguard Worker [repackage] them. **If your code is a library, we strongly recommend using 101*fb508042SAndroid Build Coastguard Worker the [Guava Beta Checker] to ensure that you do not use any `@Beta` APIs!** 102*fb508042SAndroid Build Coastguard Worker 103*fb508042SAndroid Build Coastguard Worker2. APIs without `@Beta` will remain binary-compatible for the indefinite 104*fb508042SAndroid Build Coastguard Worker future. (Previously, we sometimes removed such APIs after a deprecation 105*fb508042SAndroid Build Coastguard Worker period. The last release to remove non-`@Beta` APIs was Guava 21.0.) Even 106*fb508042SAndroid Build Coastguard Worker `@Deprecated` APIs will remain (again, unless they are `@Beta`). We have no 107*fb508042SAndroid Build Coastguard Worker plans to start removing things again, but officially, we're leaving our 108*fb508042SAndroid Build Coastguard Worker options open in case of surprises (like, say, a serious security problem). 109*fb508042SAndroid Build Coastguard Worker 110*fb508042SAndroid Build Coastguard Worker3. Guava has one dependency that is needed for linkage at runtime: 111*fb508042SAndroid Build Coastguard Worker `com.google.guava:failureaccess:1.0.2`. It also has 112*fb508042SAndroid Build Coastguard Worker [some annotation-only dependencies][guava-deps], which we discuss in more 113*fb508042SAndroid Build Coastguard Worker detail at that link. 114*fb508042SAndroid Build Coastguard Worker 115*fb508042SAndroid Build Coastguard Worker4. Serialized forms of ALL objects are subject to change unless noted 116*fb508042SAndroid Build Coastguard Worker otherwise. Do not persist these and assume they can be read by a future 117*fb508042SAndroid Build Coastguard Worker version of the library. 118*fb508042SAndroid Build Coastguard Worker 119*fb508042SAndroid Build Coastguard Worker5. Our classes are not designed to protect against a malicious caller. You 120*fb508042SAndroid Build Coastguard Worker should not use them for communication between trusted and untrusted code. 121*fb508042SAndroid Build Coastguard Worker 122*fb508042SAndroid Build Coastguard Worker6. For the mainline flavor, we test the libraries using OpenJDK 8, 11, and 17 123*fb508042SAndroid Build Coastguard Worker on Linux, with some additional testing on newer JDKs and on Windows. Some 124*fb508042SAndroid Build Coastguard Worker features, especially in `com.google.common.io`, may not work correctly in 125*fb508042SAndroid Build Coastguard Worker non-Linux environments. For the Android flavor, our unit tests also run on 126*fb508042SAndroid Build Coastguard Worker API level 21 (Lollipop). 127*fb508042SAndroid Build Coastguard Worker 128*fb508042SAndroid Build Coastguard Worker[guava-snapshot-api-docs]: https://guava.dev/releases/snapshot-jre/api/docs/ 129*fb508042SAndroid Build Coastguard Worker[guava-snapshot-api-diffs]: https://guava.dev/releases/snapshot-jre/api/diffs/ 130*fb508042SAndroid Build Coastguard Worker[Guava Explained]: https://github.com/google/guava/wiki/Home 131*fb508042SAndroid Build Coastguard Worker[Guava Beta Checker]: https://github.com/google/guava-beta-checker 132*fb508042SAndroid Build Coastguard Worker 133*fb508042SAndroid Build Coastguard Worker<!-- References --> 134*fb508042SAndroid Build Coastguard Worker 135*fb508042SAndroid Build Coastguard Worker[using Guava in your build]: https://github.com/google/guava/wiki/UseGuavaInYourBuild 136*fb508042SAndroid Build Coastguard Worker[repackage]: https://github.com/google/guava/wiki/UseGuavaInYourBuild#what-if-i-want-to-use-beta-apis-from-a-library-that-people-use-as-a-dependency 137*fb508042SAndroid Build Coastguard Worker[guava-deps]: https://github.com/google/guava/wiki/UseGuavaInYourBuild#what-about-guavas-own-dependencies 138