|
|
|
# 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, `4.28.2`.
|
|
|
|
|
|
|
|
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.bazel) 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.
|
|
|
|
|
|
|
|
## Kotlin Protocol Buffers
|
|
|
|
|
|
|
|
This directory also provides support for Kotlin protocol buffers, which are
|
|
|
|
built on top of Java protocol buffers. Kotlin protocol buffers require a
|
|
|
|
dependency on Java protocol buffers, and both Java and Kotlin protocol buffer
|
|
|
|
code must be generated for every proto file.
|
|
|
|
|
|
|
|
The main goal of Kotlin protobuf is to provide idiomatic ways to build and read
|
|
|
|
protocol buffers in Kotlin. Learn more about Kotlin protobufs in our
|
|
|
|
[documentation](https://protobuf.dev/getting-started/kotlintutorial/).
|
|
|
|
|
|
|
|
### Use Kotlin Protocol Buffers
|
|
|
|
|
|
|
|
To use protobuf in Kotlin, first install the protocol compiler (protoc --
|
|
|
|
instructions for installing are in the top-level [README.md](../README.md)) and
|
|
|
|
use it to generate Java and Kotlin code for your .proto files:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ protoc --java_out=${OUTPUT_DIR} --kotlin_out=${OUTPUT_DIR} path/to/your/proto/file
|
|
|
|
```
|
|
|
|
|
|
|
|
Include the generated Java and Kotlin files in your project and add a dependency on the
|
|
|
|
protobuf Java and Kotlin 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>
|
|
|
|
|
|
|
|
<dependency>
|
|
|
|
<groupId>com.google.protobuf</groupId>
|
|
|
|
<artifactId>protobuf-kotlin</artifactId>
|
|
|
|
<version><!--version--></version>
|
|
|
|
</dependency>
|
|
|
|
```
|
|
|
|
|
|
|
|
**Replace `<!--version-->` with a version from the
|
|
|
|
[Maven Protocol Buffers Repository](https://mvnrepository.com/artifact/com.google.protobuf/protobuf-kotlin),**
|
|
|
|
such as `4.28.2`.
|
|
|
|
|
|
|
|
Make sure the version number of the runtimes match each other and match (or are
|
|
|
|
newer than) the version number of the protoc.
|
|
|
|
|
|
|
|
### Use Kotlin Protocol Buffers on Android
|
|
|
|
|
|
|
|
For Android users, it's recommended to use the Java Lite runtime for its smaller
|
|
|
|
code size. We provide a `protobuf-kotlin-lite` package in Maven and Bazel to
|
|
|
|
pair with the Java Lite runtime. Use these if you want to use Kotlin on
|
|
|
|
Android or in another context where you want to use Java Lite. Similar to the
|
|
|
|
full runtime, `protobuf-kotlin-lite` requires a dependency on
|
|
|
|
`protobuf-java-lite`.
|
|
|
|
|
|
|
|
## 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/
|