| # Protocol Buffers - Google's data interchange format |
| |
| Copyright 2008 Google Inc. |
| |
| https://developers.google.com/protocol-buffers/ |
| |
| ## Use Java Protocol Buffers |
| |
| To use protobuf in Java, first obtain the protocol compiler (a.k.a., protoc, |
| see instructions in the toplevel [README.md](../README.md)) and use it to |
| generate Java code for your .proto files: |
| |
| $ protoc --java_out=${OUTPUT_DIR} path/to/your/proto/file |
| |
| Include the generated Java files in your project and add a dependency on the |
| protobuf Java runtime. |
| |
| ### Maven |
| |
| If you are using Maven, use the following: |
| |
| ```xml |
| <dependency> |
| <groupId>com.google.protobuf</groupId> |
| <artifactId>protobuf-java</artifactId> |
| <version><!--version--></version> |
| </dependency> |
| ``` |
| |
| And **replace `<!--version-->` with a version from the |
| [Maven Protocol Buffers Repository](https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java).** |
| For example, `3.25.3`. |
| |
| Make sure the version number of the runtime matches (or is newer than) the |
| version number of the protoc. |
| |
| If you want to use features like protobuf JsonFormat, add a dependency on the |
| protobuf-java-util package: |
| |
| ```xml |
| <dependency> |
| <groupId>com.google.protobuf</groupId> |
| <artifactId>protobuf-java-util</artifactId> |
| <version><!--version--></version> |
| </dependency> |
| ``` |
| |
| ### Use Java Protocol Buffers on Android |
| |
| For Android users, it's recommended to use protobuf Java Lite runtime because |
| of its smaller code size. Java Lite runtime also works better with Proguard |
| because it doesn't rely on Java reflection and is optimized to allow as much |
| code stripping as possible. You can following these [instructions to use Java |
| Lite runtime](lite.md). |
| |
| ### Use Java Protocol Buffers with Bazel |
| |
| Bazel has native build rules to work with protobuf. For Java, you can use the |
| `java_proto_library` rule for server and the `java_lite_proto_library` rule |
| for Android. Check out [our build files examples](../examples/BUILD) to learn |
| how to use them. |
| |
| ## Build from Source |
| |
| Most users should follow the instructions above to use protobuf Java runtime. |
| If you are contributing code to protobuf or want to use a protobuf version |
| that hasn't been officially released yet, you can follow the instructions |
| below to build protobuf from source code. |
| |
| ### Build from Source |
| |
| You may follow these instructions to build from source. This does not require |
| Maven to be installed. Note that these instructions skip running unit tests and |
| only describes how to install the core protobuf library (without the util |
| package). |
| |
| 1) Build the C++ code, or obtain a binary distribution of protoc (see |
| the toplevel [README.md](../README.md)). If you install a binary |
| distribution, make sure that it is the same version as this package. |
| If in doubt, run: |
| |
| $ protoc --version |
| |
| If you built the C++ code without installing, the compiler binary |
| should be located in ../src. |
| |
| 2) Invoke protoc to build DescriptorProtos.java: |
| |
| $ protoc --java_out=core/src/main/java -I../src \ |
| ../src/google/protobuf/descriptor.proto |
| |
| 3) Compile the code in core/src/main/java using whatever means you prefer. |
| |
| 4) Install the classes wherever you prefer. |
| |
| ### Build from Source - With Maven |
| |
| WARNING: Building from source with Maven is deprecated and will be removed in the 4.28.x release. |
| |
| 1) Install Apache Maven if you don't have it: |
| |
| http://maven.apache.org/ |
| |
| 2) Build the C++ code, or obtain a binary distribution of protoc (see |
| the toplevel [README.md](../README.md)). If you install a binary |
| distribution, make sure that it is the same version as this package. |
| If in doubt, run: |
| |
| $ protoc --version |
| |
| You will need to place the protoc executable in ../src. (If you |
| built it yourself, it should already be there.) |
| |
| 3) Run the tests: |
| |
| $ mvn test |
| |
| If some tests fail, this library may not work correctly on your |
| system. Continue at your own risk. |
| |
| 4) Install the library into your Maven repository: |
| |
| $ mvn install |
| |
| 5) If you do not use Maven to manage your own build, you can build a |
| .jar file to use: |
| |
| $ mvn package |
| |
| The .jar will be placed in the "target" directory. |
| |
| The above instructions will install 2 maven artifacts: |
| |
| * protobuf-java: The core Java Protocol Buffers library. Most users only |
| need this artifact. |
| * protobuf-java-util: Utilities to work with protos. It contains JSON support |
| as well as utilities to work with proto3 well-known |
| types. |
| |
| ## Compatibility Notice |
| |
| * Protobuf minor version releases are backwards-compatible. If your code |
| can build/run against the old version, it's expected to build/run against |
| the new version as well. Both binary compatibility and source compatibility |
| are guaranteed for minor version releases if the user follows the guideline |
| described in this section. |
| |
| * Protobuf major version releases may also be backwards-compatible with the |
| last release of the previous major version. See the release notice for more |
| details. |
| |
| * APIs marked with the @ExperimentalApi annotation are subject to change. They |
| can be modified in any way, or even removed, at any time. Don't use them if |
| compatibility is needed. If your code is a library itself (i.e. it is used on |
| the CLASSPATH of users outside your own control), you should not use |
| experimental APIs, unless you repackage them (e.g. using ProGuard). |
| |
| * Deprecated non-experimental APIs will be removed two years after the release |
| in which they are first deprecated. You must fix your references before this |
| time. If you don't, any manner of breakage could result (you are not |
| guaranteed a compilation error). |
| |
| * Protobuf message interfaces/classes are designed to be subclassed by protobuf |
| generated code only. Do not subclass these message interfaces/classes |
| yourself. We may add new methods to the message interfaces/classes which will |
| break your own subclasses. |
| |
| * Don't use any method/class that is marked as "used by generated code only". |
| Such methods/classes are subject to change. |
| |
| * Protobuf LITE runtime APIs are not stable yet. They are subject to change even |
| in minor version releases. |
| |
| ## Documentation |
| |
| The complete documentation for Protocol Buffers is available via the |
| web at: |
| |
| https://developers.google.com/protocol-buffers/ |
| |
| ## Kotlin Protocol Buffers |
| |
| Code to support more idiomatic Kotlin protocol buffers has been added to the |
| repository, and Kotlin support will be launched in the next numbered release. |