| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- Protocol Buffers - Google's data interchange format
- Copyright 2008 Google Inc.
- This directory contains the Java Protocol Buffers runtime library.
- Installation - With Maven
- =========================
- The Protocol Buffers build is managed using Maven. If you would
- rather build without Maven, see below.
- 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:
- $ 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.
- 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:
- $ 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>
- Installation - 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.
- 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
- 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=src/main/java -I../src \
- ../src/google/protobuf/descriptor.proto
- 3) Compile the code in src/main/java using whatever means you prefer.
- 4) Install the classes wherever you prefer.
- Micro version
- ============================
- The runtime and generated code for MICRO_RUNTIME is smaller
- because it does not include support for the descriptor,
- reflection or extensions. Also, not currently supported
- are packed repeated elements nor testing of java_multiple_files.
- To create a jar file for the runtime and run tests invoke
- "mvn package -P micro" from the <protobuf-root>/java
- directory. The generated jar file is
- <protobuf-root>java/target/protobuf-java-2.2.0-micro.jar.
- If you wish to compile the MICRO_RUTIME your self, place
- the 7 files below, in <root>/com/google/protobuf and
- create a jar file for use with your code and the generated
- code:
- ByteStringMicro.java
- CodedInputStreamMicro.java
- CodedOutputStreamMicro.java
- InvalidProtocolBufferException.java
- MessageMicro.java
- WireFormatMicro.java
- If you wish to change on the code generator it is located
- in /src/google/protobuf/compiler/javamicro.
- To generate code for the MICRO_RUNTIME invoke protoc with
- --javamicro_out command line parameter. javamciro_out takes
- a series of optional sub-parameters separated by comma's
- and a final parameter, with a colon separator, which defines
- the source directory. Sub-paraemeters begin with a name
- followed by an equal and if that sub-parameter has multiple
- parameters they are seperated by "|". The command line options
- are:
- opt -> speed or space
- java_use_vector -> true or false
- java_package -> <file-name>|<package-name>
- java_outer_classname -> <file-name>|<package-name>
- opt:
- This change the code generation to optimize for speed,
- opt=speed, or space, opt=space. When opt=speed this
- changes the code generation for strings so that multiple
- conversions to Utf8 are eliminated. The default value
- is opt=space.
- java_use_vector:
- Is a boolean flag either java_use_vector=true or
- java_use_vector=false. When java_use_vector=true the
- code generated for repeated elements uses
- java.util.Vector and when java_use_vector=false the
- java.util.ArrayList<> is used. When java.util.Vector
- is used the code must be compiled with Java 1.3 and
- when ArrayList is used Java 1.5 or above must be used.
- The using javac the source parameter maybe used to
- control the version of the srouce: "javac -source 1.3".
- You can also change the <source> xml element for the
- maven-compiler-plugin. Below is for 1.5 sources:
- <plugin>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.5</source>
- <target>1.5</target>
- </configuration>
- </plugin>
- When compiling for 1.5 java_use_vector=false or not
- present where the default value is false.
- And below would be for 1.3 sources note when changing
- to 1.3 you must also set java_use_vector=true:
- <plugin>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.3</source>
- <target>1.5</target>
- </configuration>
- </plugin>
- java_package:
- The allows setting/overriding the java_package option
- and associates allows a package name for a file to
- be specified on the command line. Overriding any
- "option java_package xxxx" in the file. The default
- if not present is to use the value from the package
- statment or "option java_package xxxx" in the file.
- java_outer_classname:
- This allows the setting/overriding of the outer
- class name option and associates a class name
- to a file. An outer class name is required and
- must be specified if there are multiple messages
- in a single proto file either in the proto source
- file or on the command line. If not present the
- no outer class name will be used.
- Below are a series of examples for clarification of the
- various javamicro_out parameters using
- src/test/proto/simple-data.proto:
- package testprotobuf;
- message SimpleData {
- optional fixed64 id = 1;
- optional string description = 2;
- optional bool ok = 3 [default = false];
- };
- Assuming you've only compiled and not installed protoc and
- your current working directory java/, then a simple
- command line to compile simple-data would be:
- ../src/protoc --javamicro_out=. src/test/proto/simple-data.proto
- This will create testprotobuf/SimpleData.java
- The directory testprotobuf is created because on line 1
- of simple-data.proto is "package testprotobuf;". If you
- wanted a different package name you could use the
- java_package option command line sub-parameter:
- ../src/protoc '--javamicro_out=java_package=src/test/proto/simple-data.proto|my_package:.' src/test/proto/simple-data.proto
- Here you see the new java_package sub-parameter which
- itself needs two parameters the file name and the
- package name, these are separated by "|". Now you'll
- find my_package/SimpleData.java.
- If you wanted to also change the optimization for
- speed you'd add opt=speed with the comma seperator
- as follows:
- ../src/protoc '--javamicro_out=opt=speed,java_package=src/test/proto/simple-data.proto|my_package:.' src/test/proto/simple-data.proto
- Finally if you also wanted an outer class name you'd
- do the following:
- ../src/protoc '--javamicro_out=opt=speed,java_package=src/test/proto/simple-data.proto|my_package,java_outer_classname=src/test/proto/simple-data.proto|OuterName:.' src/test/proto/simple-data.proto
- Now you'll find my_packate/OuterName.java.
- As mentioned java_package and java_outer_classname
- may also be specified in the file. In the example
- below we must define java_outer_classname because
- there are multiple messages in
- src/test/proto/two-messages.proto
- package testmicroruntime;
- option java_package = "com.example";
- option java_outer_classname = "TestMessages";
- message TestMessage1 {
- required int32 id = 1;
- }
- message TestMessage2 {
- required int32 id = 1;
- }
- This could be compiled using:
- ../src/protoc --javamicro_out=. src/test/proto/two-message.proto
- With the result will be com/example/TestMessages.java
- Usage
- =====
- The complete documentation for Protocol Buffers is available via the
- web at:
- http://code.google.com/apis/protocolbuffers/
|