提交 a9cca056 编写于 作者: S Sijie Guo 提交者: Matteo Merli

Include a pre-built protoc in `pulsar-build` docker image (#743)

上级 5f5015bd
......@@ -19,6 +19,10 @@
FROM ubuntu:16.04
# prepare the directory for pulsar related files
RUN mkdir /pulsar
ADD protobuf.patch /pulsar
RUN apt-get update
RUN apt-get install -y maven tig g++ cmake libssl-dev libcurl4-openssl-dev \
liblog4cxx-dev libprotobuf-dev libboost-all-dev libgtest-dev \
......@@ -51,3 +55,12 @@ RUN wget https://github.com/pseudomuto/protoc-gen-doc/releases/download/v1.0.0-a
tar xvfz protoc-gen-doc-1.0.0-alpha.linux-amd64.go1.8.1.tar.gz && \
cp protoc-gen-doc-1.0.0-alpha.linux-amd64.go1.8.1/protoc-gen-doc /usr/local/bin && \
rm protoc-gen-doc-1.0.0-alpha.linux-amd64.go1.8.1.tar.gz
# Build the patched protoc
RUN git clone https://github.com/google/protobuf.git /pulsar/protobuf && \
cd /pulsar/protobuf && \
git checkout v2.4.1 && \
patch -p1 < /pulsar/protobuf.patch && \
autoreconf --install && \
./configure && \
make
......@@ -11,15 +11,9 @@ The pre-generated Java code is at `pulsar-common/src/main/java/org/apache/pulsar
We are currently using a modified version of the Google Protocol Buffer code generator, to generate code that can serialize/deserialize messages with no memory allocations (caching already instantiated objects) and also to be able to directly use Netty pooled ByteBuf with direct memory.
To re-generate the `PulsarApi.java` code you need to apply a patch to the protobuf generator. Patch is found in `protobuf.patch`.
To re-generate the `PulsarApi.java` code you need to apply a patch to the protobuf generator. Patch is found in `build/docker/protobuf.patch`.
### For C++ Client:
The pre-generated C++ code is at `pulsar-client-cpp/lib/PulsarApi.pb.cc` and `pulsar-client-cpp/lib/PulsarApi.pb.h`.
You don't need to manually generate C++ code. The C++ code is automatically generated by `cmake`.
### Commands for creating the pre-generated Java code
#### Commands for creating the pre-generated Java code
```shell
export PULSAR_HOME=<Path where you cloned the pulsar repo>
......@@ -31,7 +25,7 @@ cd ${HOME}/protobuf
git checkout v2.4.1
### Apply patch
patch -p1 < ${PULSAR_HOME}/protobuf/protobuf.patch
patch -p1 < ${PULSAR_HOME}/build/docker/protobuf.patch
### Compile protobuf
autoreconf --install
......@@ -43,3 +37,16 @@ cd ${PULSAR_HOME}/pulsar-common/
export PROTOC=${HOME}/protobuf/src/protoc
./generate_protobuf.sh
```
Or you can use the pre-built protoc included in `pulsar-build` docker image to generate java protobuf files.
```
cd ${PULSAR_HOME}/pulsar-common/
./generate_protobuf_docker.sh
```
### For C++ Client:
The pre-generated C++ code is at `pulsar-client-cpp/lib/PulsarApi.pb.cc` and `pulsar-client-cpp/lib/PulsarApi.pb.h`.
You don't need to manually generate C++ code. The C++ code is automatically generated by `cmake`.
#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
# Fail script in case of errors
set -e
ROOT_DIR=$(git rev-parse --show-toplevel)
COMMON_DIR=$ROOT_DIR/pulsar-common
cd $COMMON_DIR
BUILD_IMAGE_NAME="${BUILD_IMAGE_NAME:-apachepulsar/pulsar-build}"
BUILD_IMAGE_VERSION="${BUILD_IMAGE_VERSION:-ubuntu-16.04}"
IMAGE="$BUILD_IMAGE_NAME:$BUILD_IMAGE_VERSION"
echo $IMAGE
docker run -i \
-v ${COMMON_DIR}:${COMMON_DIR} $IMAGE \
bash -c "cd ${COMMON_DIR}; /pulsar/protobuf/src/protoc --java_out=src/main/java src/main/proto/PulsarApi.proto"
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册