xref: /aosp_15_r20/external/guava/README.md (revision fb5080426417cab6bd44d0ed3f37e47d42859579)
1*fb508042SAndroid Build Coastguard Worker# Guava: Google Core Libraries for Java
2*fb508042SAndroid Build Coastguard Worker
3*fb508042SAndroid Build Coastguard Worker[![Latest release](https://img.shields.io/github/release/google/guava.svg)](https://github.com/google/guava/releases/latest)
4*fb508042SAndroid Build Coastguard Worker[![Build Status](https://github.com/google/guava/workflows/CI/badge.svg?branch=master)](https://github.com/google/guava/actions)
5*fb508042SAndroid Build Coastguard Worker[![OpenSSF Best Practices](https://bestpractices.coreinfrastructure.org/projects/7197/badge)](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