diff options
Diffstat (limited to 'java/README.md')
-rw-r--r-- | java/README.md | 148 |
1 files changed, 107 insertions, 41 deletions
diff --git a/java/README.md b/java/README.md index 060d9ac6..5e4fb8b4 100644 --- a/java/README.md +++ b/java/README.md @@ -1,25 +1,74 @@ -Protocol Buffers - Google's data interchange format -=================================================== - -[![Build Status](https://travis-ci.org/google/protobuf.svg?branch=master)](https://travis-ci.org/google/protobuf) +# Protocol Buffers - Google's data interchange format Copyright 2008 Google Inc. -This directory contains the Java Protocol Buffers runtime library. +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. If you are using Maven, use the following: + +```xml +<dependency> + <groupId>com.google.protobuf</groupId> + <artifactId>protobuf-java</artifactId> + <version>3.5.1</version> +</dependency> +``` + +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>3.5.1</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 -Installation - With Maven -========================= +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 folllow the instructions +below to build protobuf from source code. -The Protocol Buffers build is managed using Maven. If you would -rather build without Maven, see below. +### Build from Source - With Maven 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. If - you install a binary distribution, make sure that it is the same - version as this package. If in doubt, run: +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 @@ -44,36 +93,20 @@ rather build without Maven, see below. The .jar will be placed in the "target" directory. -Installation - 'Lite' Version - With Maven -========================================== - -Building the 'lite' version of the Java Protocol Buffers library is -the same as building the full version, except that all commands are -run using the 'lite' profile. (see -http://maven.apache.org/guides/introduction/introduction-to-profiles.html) - -E.g. to install the lite version of the jar, you would run: +The above instructions will install 2 maven artifacts: - $ mvn install -P lite - -The resulting artifact has the 'lite' classifier. To reference it -for dependency resolution, you would specify it as: - -``` - <dependency> - <groupId>com.google.protobuf</groupId> - <artifactId>protobuf-java</artifactId> - <version>${version}</version> - <classifier>lite</classifier> - </dependency> -``` + * 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. -Installation - Without Maven -============================ +### Build from Source - Without Maven If you would rather not install Maven to build the library, you may follow these instructions instead. Note that these instructions skip -running unit tests. +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. If you install a binary distribution, make sure that it is the same @@ -86,15 +119,48 @@ running unit tests. 2) Invoke protoc to build DescriptorProtos.java: - $ protoc --java_out=src/main/java -I../src \ + $ protoc --java_out=core/src/main/java -I../src \ ../src/google/protobuf/descriptor.proto -3) Compile the code in src/main/java using whatever means you prefer. +3) Compile the code in core/src/main/java using whatever means you prefer. 4) Install the classes wherever you prefer. -Usage -===== +## 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-compatbile 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: |