2015-08-14 23:49:56 +08:00
|
|
|
Building gRPC-Java
|
|
|
|
==================
|
|
|
|
|
2018-12-07 05:17:59 +08:00
|
|
|
Building is only necessary if you are making changes to gRPC-Java or testing/using a non-released
|
|
|
|
version (e.g. master HEAD) of gRPC-Java library.
|
2015-08-14 23:49:56 +08:00
|
|
|
|
|
|
|
Building requires JDK 8, as our tests use TLS.
|
|
|
|
|
|
|
|
grpc-java has a C++ code generation plugin for protoc. Since many Java
|
2018-12-07 05:17:59 +08:00
|
|
|
developers don't have C compilers installed and don't need to run or modify the
|
2015-08-14 23:49:56 +08:00
|
|
|
codegen, the build can skip it. To skip, create the file
|
|
|
|
`<project-root>/gradle.properties` and add `skipCodegen=true`.
|
|
|
|
|
2020-01-10 07:20:41 +08:00
|
|
|
Some parts of grpc-java depend on Android. Since many Java developers don't have
|
|
|
|
the Android SDK installed and don't need to run or modify the Android
|
|
|
|
components, the build can skip it. To skip, create the file
|
|
|
|
`<project-root>/gradle.properties` and add `skipAndroid=true`.
|
2022-01-08 01:52:26 +08:00
|
|
|
Otherwise, create the file `<project-root>/gradle.properties` and add `android.useAndroidX=true`.
|
2020-01-10 07:20:41 +08:00
|
|
|
|
2015-08-14 23:49:56 +08:00
|
|
|
Then, to build, run:
|
|
|
|
```
|
|
|
|
$ ./gradlew build
|
|
|
|
```
|
|
|
|
|
|
|
|
To install the artifacts to your Maven local repository for use in your own
|
|
|
|
project, run:
|
|
|
|
```
|
2019-02-01 09:38:43 +08:00
|
|
|
$ ./gradlew publishToMavenLocal
|
2015-08-14 23:49:56 +08:00
|
|
|
```
|
|
|
|
|
2018-01-12 05:58:03 +08:00
|
|
|
### Notes for IntelliJ
|
2019-10-09 22:47:34 +08:00
|
|
|
Building in IntelliJ works best when you import the project as a Gradle project and delegate IDE
|
2018-01-12 05:58:03 +08:00
|
|
|
build/run actions to Gradle.
|
|
|
|
|
|
|
|
You can find this setting at:
|
|
|
|
```Settings -> Build, Execution, Deployment
|
|
|
|
-> Build Tools -> Gradle -> Runner
|
|
|
|
-> Delegate IDE build/run actions to gradle.
|
|
|
|
```
|
|
|
|
|
2015-08-14 23:49:56 +08:00
|
|
|
How to Build Code Generation Plugin
|
|
|
|
-----------------------------------
|
|
|
|
This section is only necessary if you are making changes to the code
|
|
|
|
generation. Most users only need to use `skipCodegen=true` as discussed above.
|
|
|
|
|
|
|
|
### Build Protobuf
|
2022-10-11 06:33:59 +08:00
|
|
|
The codegen plugin is C++ code and requires protobuf 21.7 or later.
|
2015-08-14 23:49:56 +08:00
|
|
|
|
|
|
|
For Linux, Mac and MinGW:
|
|
|
|
```
|
2022-10-11 06:33:59 +08:00
|
|
|
$ PROTOBUF_VERSION=21.7
|
2019-10-05 06:09:05 +08:00
|
|
|
$ curl -LO https://github.com/protocolbuffers/protobuf/releases/download/v$PROTOBUF_VERSION/protobuf-all-$PROTOBUF_VERSION.tar.gz
|
|
|
|
$ tar xzf protobuf-all-$PROTOBUF_VERSION.tar.gz
|
|
|
|
$ cd protobuf-$PROTOBUF_VERSION
|
2019-03-14 03:44:36 +08:00
|
|
|
$ ./configure --disable-shared
|
2019-10-05 06:09:05 +08:00
|
|
|
$ make # You may want to pass -j to make this run faster; see make --help
|
2015-08-14 23:49:56 +08:00
|
|
|
$ sudo make install
|
|
|
|
```
|
|
|
|
|
|
|
|
If you are comfortable with C++ compilation and autotools, you can specify a
|
|
|
|
``--prefix`` for Protobuf and use ``-I`` in ``CXXFLAGS``, ``-L`` in
|
2019-03-14 03:44:36 +08:00
|
|
|
``LDFLAGS`` to reference it. The
|
2015-08-14 23:49:56 +08:00
|
|
|
environment variables will be used when building grpc-java.
|
|
|
|
|
|
|
|
Protobuf installs to ``/usr/local`` by default.
|
|
|
|
|
2015-09-25 06:27:26 +08:00
|
|
|
For Visual C++, please refer to the [Protobuf README](https://github.com/google/protobuf/blob/master/cmake/README.md)
|
|
|
|
for how to compile Protobuf. gRPC-java assumes a Release build.
|
2015-08-14 23:49:56 +08:00
|
|
|
|
|
|
|
#### Mac
|
|
|
|
Some versions of Mac OS X (e.g., 10.10) doesn't have ``/usr/local`` in the
|
|
|
|
default search paths for header files and libraries. It will fail the build of
|
|
|
|
the codegen. To work around this, you will need to set environment variables:
|
|
|
|
```
|
|
|
|
$ export CXXFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib"
|
|
|
|
```
|
|
|
|
|
|
|
|
### Notes for Visual C++
|
|
|
|
|
|
|
|
When building on Windows and VC++, you need to specify project properties for
|
|
|
|
Gradle to find protobuf:
|
|
|
|
```
|
2019-02-01 09:38:43 +08:00
|
|
|
.\gradlew publishToMavenLocal ^
|
2021-06-05 00:08:51 +08:00
|
|
|
-PvcProtobufInclude=C:\path\to\protobuf\src ^
|
|
|
|
-PvcProtobufLibs=C:\path\to\protobuf\vsprojects\Release ^
|
2015-09-25 06:27:26 +08:00
|
|
|
-PtargetArch=x86_32
|
2015-08-14 23:49:56 +08:00
|
|
|
```
|
|
|
|
|
|
|
|
Since specifying those properties every build is bothersome, you can instead
|
|
|
|
create ``<project-root>\gradle.properties`` with contents like:
|
|
|
|
```
|
2021-06-05 00:08:51 +08:00
|
|
|
vcProtobufInclude=C:\\path\\to\\protobuf\\src
|
|
|
|
vcProtobufLibs=C:\\path\\to\\protobuf\\vsprojects\\Release
|
2015-09-25 06:27:26 +08:00
|
|
|
targetArch=x86_32
|
2015-08-14 23:49:56 +08:00
|
|
|
```
|
|
|
|
|
2015-09-25 06:27:26 +08:00
|
|
|
By default, the build script will build the codegen for the same architecture as
|
|
|
|
the Java runtime installed on your system. If you are using 64-bit JVM, the
|
|
|
|
codegen will be compiled for 64-bit. Since Protobuf is only built for 32-bit by
|
|
|
|
default, the `targetArch=x86_32` is necessary.
|
2015-08-14 23:49:56 +08:00
|
|
|
|
|
|
|
### Notes for MinGW on Windows
|
|
|
|
If you have both MinGW and VC++ installed on Windows, VC++ will be used by
|
|
|
|
default. To override this default and use MinGW, add ``-PvcDisable=true``
|
|
|
|
to your Gradle command line or add ``vcDisable=true`` to your
|
|
|
|
``<project-root>\gradle.properties``.
|
|
|
|
|
|
|
|
### Notes for Unsupported Operating Systems
|
|
|
|
The build script pulls pre-compiled ``protoc`` from Maven Central by default.
|
|
|
|
We have built ``protoc`` binaries for popular systems, but they may not work
|
|
|
|
for your system. If ``protoc`` cannot be downloaded or would not run, you can
|
|
|
|
use the one that has been built by your own, by adding this property to
|
|
|
|
``<project-root>/gradle.properties``:
|
|
|
|
```
|
|
|
|
protoc=/path/to/protoc
|
|
|
|
```
|
2020-01-11 01:58:28 +08:00
|
|
|
|
|
|
|
How to install Android SDK
|
|
|
|
---------------------------
|
|
|
|
This section is only necessary if you are building modules depending on Android
|
|
|
|
(e.g., `cronet`). Non-Android users only need to use `skipAndroid=true` as
|
|
|
|
discussed above.
|
|
|
|
|
|
|
|
### Install via Android Studio (GUI)
|
|
|
|
Download and install Android Studio from [Android Developer site](https://developer.android.com/studio).
|
|
|
|
You can find the configuration for Android SDK at:
|
|
|
|
```
|
|
|
|
Preferences -> System Settings -> Android SDK
|
|
|
|
```
|
|
|
|
Select the version of Android SDK to be installed and click `apply`. The location
|
|
|
|
of Android SDK being installed is shown at `Android SDK Location` at the same panel.
|
|
|
|
The default is `$HOME/Library/Android/sdk` for Mac OS and `$HOME/Android/Sdk` for Linux.
|
|
|
|
You can change this to a custom location.
|
|
|
|
|
2022-02-26 00:40:14 +08:00
|
|
|
### Install via Command line tools only
|
|
|
|
Go to [Android SDK](https://developer.android.com/studio#command-tools) and
|
|
|
|
download the commandlinetools package for your build machine OS. Decide where
|
|
|
|
you want the Android SDK to be stored. `$HOME/Library/Android/sdk` is typical on
|
|
|
|
Mac OS and `$HOME/Android/Sdk` for Linux.
|
|
|
|
|
|
|
|
```sh
|
|
|
|
export ANDROID_HOME=$HOME/Android/Sdk # Adjust to your liking
|
|
|
|
mkdir $HOME/Android
|
|
|
|
mkdir $ANDROID_HOME
|
|
|
|
mkdir $ANDROID_HOME/cmdline-tools
|
|
|
|
unzip -d $ANDROID_HOME/cmdline-tools DOWNLOADS/commandlinetools-*.zip
|
|
|
|
mv $ANDROID_HOME/cmdline-tools/cmdline-tools $ANDROID_HOME/cmdline-tools/latest
|
|
|
|
# Android SDK is now ready. Now accept licenses so the build can auto-download packages
|
|
|
|
$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --licenses
|
|
|
|
|
|
|
|
# Add 'export ANDROID_HOME=$HOME/Android/Sdk' to your .bashrc or equivalent
|
2020-05-28 00:11:47 +08:00
|
|
|
```
|