[TAJO-2185] Eliminate protoc binary dependency

Close #1052
diff --git a/.travis.yml b/.travis.yml
index 61f816c..05c0920 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -13,6 +13,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+sudo: required
+dist: trusty
 language: java
 
 git:
@@ -63,16 +65,14 @@
   # http://docs.travis-ci.com/user/database-setup/#MySQL
   - sudo /etc/init.d/mysql stop
   - sudo /etc/init.d/postgresql stop
-  - ulimit -t unlimited -u 10000 -n 64000
-  - ulimit -a
+  - sudo sh -c "ulimit -p 10000 && ulimit -n 64000 && ulimit -t unlimited && ulimit -a"
   - free -m
   - df -h
 
 install:
-  - sh dev-support/travis-install-dependencies.sh
   - mvn clean install -q -ff -Dsurefire.useFile=false $HADOOP_FLAG -Pdist -DskipTests -Dtar
 
 script: 
-  - mvn $HADOOP_FLAG $TEST_FLAG
+  - travis_wait 30 mvn $HADOOP_FLAG $TEST_FLAG
   - sh -c "dmesg | grep -i OOM || exit 0"
   - free -m
diff --git a/BUILDING b/BUILDING
index 4ffe44e..8665ecb 100644
--- a/BUILDING
+++ b/BUILDING
@@ -6,7 +6,6 @@
 * Unix System
 * JDK 1.8 or higher
 * Maven 3.0 or higher
-* Protocol Buffers 2.5.0
 * Internet connection for first build (to fetch all Maven and Tajo dependencies)
 
 --------------------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 32c33f4..df24ad9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -152,41 +152,7 @@
           <artifactId>maven-deploy-plugin</artifactId>
           <version>2.5</version>
         </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-antrun-plugin</artifactId>
-          <version>1.6</version>
-          <executions>
-            <execution>
-              <phase>validate</phase>
-              <goals>
-                <goal>run</goal>
-              </goals>
-              <configuration>
-                <target>
-                  <echo file="${project.build.directory}/verify-protocbuf.sh">
-                    PROTOC_VERSION=`protoc --version`
-                    if [ "${PROTOC_VERSION}" == "" ]; then
-                    echo
-                    echo "Protocol buffer is not installed or protocol buffer path did not add to your PATH variable."
-                    echo
-                    exit -1
-                    fi
-                    if [ "${PROTOC_VERSION}" != "libprotoc 2.5.0" ]; then
-                    echo
-                    echo "Tajo requires protocol buffer version 2.5.0, another versions is not supported."
-                    echo
-                    exit -1
-                    fi
-                  </echo>
-                  <exec executable="bash" dir="${project.build.directory}" failonerror="true">
-                    <arg line="./verify-protocbuf.sh" />
-                  </exec>
-                </target>
-              </configuration>
-            </execution>
-          </executions>
-        </plugin>
+
         <plugin>
           <groupId>org.apache.rat</groupId>
           <artifactId>apache-rat-plugin</artifactId>
diff --git a/tajo-catalog/tajo-catalog-client/pom.xml b/tajo-catalog/tajo-catalog-client/pom.xml
index 933ec82..e5c171d 100644
--- a/tajo-catalog/tajo-catalog-client/pom.xml
+++ b/tajo-catalog/tajo-catalog-client/pom.xml
@@ -70,26 +70,27 @@
         </executions>
       </plugin>
       <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>exec-maven-plugin</artifactId>
-        <version>1.2</version>
+        <groupId>com.github.os72</groupId>
+        <artifactId>protoc-jar-maven-plugin</artifactId>
+        <version>3.5.0</version>
         <executions>
           <execution>
-            <id>generate-sources</id>
             <phase>generate-sources</phase>
-            <configuration>
-              <executable>protoc</executable>
-              <arguments>
-                <argument>-Isrc/main/proto/</argument>
-                <argument>--proto_path=../../tajo-common/src/main/proto</argument>
-                <argument>--proto_path=../../tajo-catalog/tajo-catalog-common/src/main/proto</argument>
-                <argument>--java_out=target/generated-sources/proto</argument>
-                <argument>src/main/proto/CatalogProtocol.proto</argument>
-              </arguments>
-            </configuration>
             <goals>
-              <goal>exec</goal>
+              <goal>run</goal>
             </goals>
+            <configuration>
+              <protocVersion>2.5.0</protocVersion>
+              <includeStdTypes>true</includeStdTypes>
+              <inputDirectories>
+                <include>src/main/proto/</include>
+              </inputDirectories>
+              <includeDirectories>
+                <includeDirectory>../../tajo-common/src/main/proto</includeDirectory>
+                <includeDirectory>../../tajo-catalog/tajo-catalog-common/src/main/proto</includeDirectory>
+              </includeDirectories>
+              <outputDirectory>target/generated-sources/proto</outputDirectory>
+            </configuration>
           </execution>
         </executions>
       </plugin>
diff --git a/tajo-catalog/tajo-catalog-common/pom.xml b/tajo-catalog/tajo-catalog-common/pom.xml
index 27e87b8..29cbacc 100644
--- a/tajo-catalog/tajo-catalog-common/pom.xml
+++ b/tajo-catalog/tajo-catalog-common/pom.xml
@@ -75,25 +75,26 @@
         </executions>
       </plugin>
       <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>exec-maven-plugin</artifactId>
-        <version>1.2</version>
+        <groupId>com.github.os72</groupId>
+        <artifactId>protoc-jar-maven-plugin</artifactId>
+        <version>3.5.0</version>
         <executions>
           <execution>
-            <id>generate-sources</id>
             <phase>generate-sources</phase>
-            <configuration>
-              <executable>protoc</executable>
-              <arguments>
-                <argument>-Isrc/main/proto/</argument>
-                <argument>--proto_path=../../tajo-common/src/main/proto</argument>
-                <argument>--java_out=target/generated-sources/proto</argument>
-                <argument>src/main/proto/CatalogProtos.proto</argument>
-              </arguments>
-            </configuration>
             <goals>
-              <goal>exec</goal>
+              <goal>run</goal>
             </goals>
+            <configuration>
+              <protocVersion>2.5.0</protocVersion>
+              <includeStdTypes>true</includeStdTypes>
+              <inputDirectories>
+                <include>src/main/proto/</include>
+              </inputDirectories>
+              <includeDirectories>
+                <includeDirectory>../../tajo-common/src/main/proto</includeDirectory>
+              </includeDirectories>
+              <outputDirectory>target/generated-sources/proto</outputDirectory>
+            </configuration>
           </execution>
         </executions>
       </plugin>
diff --git a/tajo-client/pom.xml b/tajo-client/pom.xml
index 90fcec6..b37a98b 100644
--- a/tajo-client/pom.xml
+++ b/tajo-client/pom.xml
@@ -110,29 +110,28 @@
         </executions>
       </plugin>
       <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>exec-maven-plugin</artifactId>
-        <version>1.2</version>
+        <groupId>com.github.os72</groupId>
+        <artifactId>protoc-jar-maven-plugin</artifactId>
+        <version>3.5.0</version>
         <executions>
           <execution>
-            <id>generate-sources</id>
             <phase>generate-sources</phase>
-            <configuration>
-              <executable>protoc</executable>
-              <arguments>
-                <argument>-Isrc/main/proto/</argument>
-                <argument>--proto_path=../tajo-common/src/main/proto</argument>
-                <argument>--proto_path=../tajo-catalog/tajo-catalog-common/src/main/proto</argument>
-                <argument>--proto_path=../tajo-core/src/main/proto</argument>
-                <argument>--java_out=target/generated-sources/proto</argument>
-                <argument>src/main/proto/ClientProtos.proto</argument>
-                <argument>src/main/proto/TajoMasterClientProtocol.proto</argument>
-                <argument>src/main/proto/QueryMasterClientProtocol.proto</argument>
-              </arguments>
-            </configuration>
             <goals>
-              <goal>exec</goal>
+              <goal>run</goal>
             </goals>
+            <configuration>
+              <protocVersion>2.5.0</protocVersion>
+              <includeStdTypes>true</includeStdTypes>
+              <inputDirectories>
+                <include>src/main/proto/</include>
+              </inputDirectories>
+              <includeDirectories>
+                <includeDirectory>../tajo-common/src/main/proto</includeDirectory>
+                <includeDirectory>../tajo-catalog/tajo-catalog-common/src/main/proto</includeDirectory>
+                <includeDirectory>../tajo-core/src/main/proto</includeDirectory>
+              </includeDirectories>
+              <outputDirectory>target/generated-sources/proto</outputDirectory>
+            </configuration>
           </execution>
         </executions>
       </plugin>
diff --git a/tajo-common/pom.xml b/tajo-common/pom.xml
index cf4eb36..67128e5 100644
--- a/tajo-common/pom.xml
+++ b/tajo-common/pom.xml
@@ -134,30 +134,23 @@
         </executions>
       </plugin>
       <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>exec-maven-plugin</artifactId>
-        <version>1.2</version>
+        <groupId>com.github.os72</groupId>
+        <artifactId>protoc-jar-maven-plugin</artifactId>
+        <version>3.5.0</version>
         <executions>
           <execution>
-            <id>generate-sources</id>
             <phase>generate-sources</phase>
-            <configuration>
-              <executable>protoc</executable>
-              <arguments>
-                <argument>-Isrc/main/proto/</argument>
-                <argument>--java_out=target/generated-sources/proto</argument>
-                <argument>src/main/proto/TestProtos.proto</argument>
-                <argument>src/main/proto/TajoIdProtos.proto</argument>
-                <argument>src/main/proto/DataTypes.proto</argument>
-                <argument>src/main/proto/PrimitiveProtos.proto</argument>
-                <argument>src/main/proto/tajo_protos.proto</argument>
-                <argument>src/main/proto/stacktrace.proto</argument>
-                <argument>src/main/proto/errors.proto</argument>
-              </arguments>
-            </configuration>
             <goals>
-              <goal>exec</goal>
+              <goal>run</goal>
             </goals>
+            <configuration>
+              <protocVersion>2.5.0</protocVersion>
+              <includeStdTypes>true</includeStdTypes>
+              <inputDirectories>
+                <include>src/main/proto/</include>
+              </inputDirectories>
+              <outputDirectory>target/generated-sources/proto</outputDirectory>
+            </configuration>
           </execution>
         </executions>
       </plugin>
diff --git a/tajo-core/pom.xml b/tajo-core/pom.xml
index 43464e3..0a99de6 100644
--- a/tajo-core/pom.xml
+++ b/tajo-core/pom.xml
@@ -93,33 +93,28 @@
         </executions>
       </plugin>
       <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>exec-maven-plugin</artifactId>
-        <version>1.2</version>
+        <groupId>com.github.os72</groupId>
+        <artifactId>protoc-jar-maven-plugin</artifactId>
+        <version>3.5.0</version>
         <executions>
           <execution>
-            <id>generate-sources</id>
             <phase>generate-sources</phase>
-            <configuration>
-              <executable>protoc</executable>
-              <arguments>
-                <argument>-Isrc/main/proto/</argument>
-                <argument>--proto_path=../tajo-common/src/main/proto</argument>
-                <argument>--proto_path=../tajo-catalog/tajo-catalog-common/src/main/proto</argument>
-                <argument>--proto_path=../tajo-client/src/main/proto</argument>
-                <argument>--proto_path=../tajo-plan/src/main/proto</argument>
-                <argument>--java_out=target/generated-sources/proto</argument>
-                <argument>src/main/proto/ResourceTrackerProtocol.proto</argument>
-                <argument>src/main/proto/QueryMasterProtocol.proto</argument>
-                <argument>src/main/proto/QueryCoordinatorProtocol.proto</argument>
-                <argument>src/main/proto/TajoWorkerProtocol.proto</argument>
-                <argument>src/main/proto/InternalTypes.proto</argument>
-                <argument>src/main/proto/ResourceProtos.proto</argument>
-              </arguments>
-            </configuration>
             <goals>
-              <goal>exec</goal>
+              <goal>run</goal>
             </goals>
+            <configuration>
+              <protocVersion>2.5.0</protocVersion>
+              <includeStdTypes>true</includeStdTypes>
+              <inputDirectories>
+                <include>src/main/proto/</include>
+              </inputDirectories>
+              <includeDirectories>
+                <includeDirectory>../tajo-common/src/main/proto</includeDirectory>
+                <includeDirectory>../tajo-catalog/tajo-catalog-common/src/main/proto</includeDirectory>
+                <includeDirectory>../tajo-plan/src/main/proto</includeDirectory>
+              </includeDirectories>
+              <outputDirectory>target/generated-sources/proto</outputDirectory>
+            </configuration>
           </execution>
         </executions>
       </plugin>
diff --git a/tajo-docs/src/main/sphinx/getting_started.rst b/tajo-docs/src/main/sphinx/getting_started.rst
index 9a20b68..0eee083 100644
--- a/tajo-docs/src/main/sphinx/getting_started.rst
+++ b/tajo-docs/src/main/sphinx/getting_started.rst
@@ -10,7 +10,6 @@
 
  * Hadoop 2.3.0 or higher (up to 2.6.0)
  * Java 1.8 or higher
- * Protocol buffer 2.5.0
 
 ===================================
 Dowload and unpack the source code
diff --git a/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/TestResultSet.java b/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/TestResultSet.java
index af4011d..508b5a8 100644
--- a/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/TestResultSet.java
+++ b/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/TestResultSet.java
@@ -232,7 +232,7 @@
       assertEquals(res.getTimestamp(3), res.getTimestamp("col3"));
 
       // assert with timezone
-      //Current timezone + 1 hour
+      // Current timezone + 1 hour
       TimeZone tz = TimeZone.getDefault();
       tz.setRawOffset(tz.getRawOffset() + (int) TimeUnit.HOURS.toMillis(1));
 
@@ -240,7 +240,8 @@
       assertEquals(tz.getRawOffset(), cal.getTimeZone().getRawOffset());
 
       assertEquals(Date.valueOf("2013-12-31"), res.getDate(1, cal));
-      assertEquals(Time.valueOf("23:00:00"), res.getTime(1, cal));
+      // TODO - See https://issues.apache.org/jira/browse/TAJO-2186
+      assertEquals(Time.valueOf("23:00:00").toString(), res.getTime(1, cal).toString());
       assertEquals(Timestamp.valueOf("2013-12-31 23:00:00.0"), res.getTimestamp(1, cal));
       assertEquals(res.getDate(1, cal), res.getDate("col1", cal));
 
diff --git a/tajo-metrics/pom.xml b/tajo-metrics/pom.xml
index 1361694..f65b0fc 100644
--- a/tajo-metrics/pom.xml
+++ b/tajo-metrics/pom.xml
@@ -71,25 +71,23 @@
         </executions>
       </plugin>
       <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>exec-maven-plugin</artifactId>
-        <version>1.2</version>
+        <groupId>com.github.os72</groupId>
+        <artifactId>protoc-jar-maven-plugin</artifactId>
+        <version>3.5.0</version>
         <executions>
           <execution>
-            <id>generate-sources</id>
             <phase>generate-sources</phase>
-            <configuration>
-              <executable>protoc</executable>
-              <arguments>
-                <argument>-Isrc/main/proto/</argument>
-                <argument>src/main/proto/master_metrics.proto</argument>
-                <argument>src/main/proto/node_metrics.proto</argument>
-                <argument>--java_out=target/generated-sources/proto</argument>
-              </arguments>
-            </configuration>
             <goals>
-              <goal>exec</goal>
+              <goal>run</goal>
             </goals>
+            <configuration>
+              <protocVersion>2.5.0</protocVersion>
+              <includeStdTypes>true</includeStdTypes>
+              <inputDirectories>
+                <include>src/main/proto/</include>
+              </inputDirectories>
+              <outputDirectory>target/generated-sources/proto</outputDirectory>
+            </configuration>
           </execution>
         </executions>
       </plugin>
diff --git a/tajo-plan/pom.xml b/tajo-plan/pom.xml
index f115015..9dff797 100644
--- a/tajo-plan/pom.xml
+++ b/tajo-plan/pom.xml
@@ -71,27 +71,28 @@
         </executions>
       </plugin>
       <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>exec-maven-plugin</artifactId>
-        <version>1.2</version>
+        <groupId>com.github.os72</groupId>
+        <artifactId>protoc-jar-maven-plugin</artifactId>
+        <version>3.5.0</version>
         <executions>
           <execution>
-            <id>generate-sources</id>
             <phase>generate-sources</phase>
-            <configuration>
-              <executable>protoc</executable>
-              <arguments>
-                <argument>-Isrc/main/proto/</argument>
-                <argument>--proto_path=../tajo-common/src/main/proto</argument>
-                <argument>--proto_path=../tajo-catalog/tajo-catalog-common/src/main/proto</argument>
-                <argument>--proto_path=../tajo-client/src/main/proto</argument>
-                <argument>--java_out=target/generated-sources/proto</argument>
-                <argument>src/main/proto/Plan.proto</argument>
-              </arguments>
-            </configuration>
             <goals>
-              <goal>exec</goal>
+              <goal>run</goal>
             </goals>
+            <configuration>
+              <protocVersion>2.5.0</protocVersion>
+              <includeStdTypes>true</includeStdTypes>
+              <inputDirectories>
+                <include>src/main/proto/</include>
+              </inputDirectories>
+              <includeDirectories>
+                <includeDirectory>../tajo-common/src/main/proto</includeDirectory>
+                <includeDirectory>../tajo-catalog/tajo-catalog-common/src/main/proto</includeDirectory>
+                <includeDirectory>../tajo-client/src/main/proto</includeDirectory>
+              </includeDirectories>
+              <outputDirectory>target/generated-sources/proto</outputDirectory>
+            </configuration>
           </execution>
         </executions>
       </plugin>
diff --git a/tajo-rpc/tajo-rpc-protobuf/pom.xml b/tajo-rpc/tajo-rpc-protobuf/pom.xml
index 4d9a62b..128d2dc 100644
--- a/tajo-rpc/tajo-rpc-protobuf/pom.xml
+++ b/tajo-rpc/tajo-rpc-protobuf/pom.xml
@@ -84,27 +84,23 @@
         </executions>
       </plugin>
       <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>exec-maven-plugin</artifactId>
-        <version>1.2</version>
+        <groupId>com.github.os72</groupId>
+        <artifactId>protoc-jar-maven-plugin</artifactId>
+        <version>3.5.0</version>
         <executions>
           <execution>
-            <id>generate-sources</id>
             <phase>generate-sources</phase>
-            <configuration>
-              <executable>protoc</executable>
-              <arguments>
-                <argument>-Isrc/main/proto/</argument>
-                <argument>--java_out=target/generated-sources/proto</argument>
-                <argument>src/main/proto/DummyProtos.proto</argument>
-                <argument>src/main/proto/RpcProtos.proto</argument>
-                <argument>src/main/proto/TestProtos.proto</argument>
-                <argument>src/main/proto/TestProtocol.proto</argument>
-              </arguments>
-            </configuration>
             <goals>
-              <goal>exec</goal>
+              <goal>run</goal>
             </goals>
+            <configuration>
+              <protocVersion>2.5.0</protocVersion>
+              <includeStdTypes>true</includeStdTypes>
+              <inputDirectories>
+                <include>src/main/proto/</include>
+              </inputDirectories>
+              <outputDirectory>target/generated-sources/proto</outputDirectory>
+            </configuration>
           </execution>
         </executions>
       </plugin>
diff --git a/tajo-storage/tajo-storage-common/pom.xml b/tajo-storage/tajo-storage-common/pom.xml
index c552ab5..3bc402d 100644
--- a/tajo-storage/tajo-storage-common/pom.xml
+++ b/tajo-storage/tajo-storage-common/pom.xml
@@ -109,26 +109,27 @@
         </executions>
       </plugin>
       <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>exec-maven-plugin</artifactId>
-        <version>1.2</version>
+        <groupId>com.github.os72</groupId>
+        <artifactId>protoc-jar-maven-plugin</artifactId>
+        <version>3.5.0</version>
         <executions>
           <execution>
-            <id>generate-sources</id>
             <phase>generate-sources</phase>
-            <configuration>
-              <executable>protoc</executable>
-              <arguments>
-                <argument>-Isrc/main/proto/</argument>
-                <argument>--proto_path=../../tajo-common/src/main/proto</argument>
-                <argument>--proto_path=../../tajo-catalog/tajo-catalog-common/src/main/proto</argument>
-                <argument>--java_out=target/generated-sources/proto</argument>
-                <argument>src/main/proto/IndexProtos.proto</argument>
-              </arguments>
-            </configuration>
             <goals>
-              <goal>exec</goal>
+              <goal>run</goal>
             </goals>
+            <configuration>
+              <protocVersion>2.5.0</protocVersion>
+              <includeStdTypes>true</includeStdTypes>
+              <inputDirectories>
+                <include>src/main/proto/</include>
+              </inputDirectories>
+              <includeDirectories>
+                <includeDirectory>../../tajo-common/src/main/proto</includeDirectory>
+                <includeDirectory>../../tajo-catalog/tajo-catalog-common/src/main/proto</includeDirectory>
+              </includeDirectories>
+              <outputDirectory>target/generated-sources/proto</outputDirectory>
+            </configuration>
           </execution>
         </executions>
       </plugin>
diff --git a/tajo-storage/tajo-storage-hbase/pom.xml b/tajo-storage/tajo-storage-hbase/pom.xml
index ddb53ca..7d178cc 100644
--- a/tajo-storage/tajo-storage-hbase/pom.xml
+++ b/tajo-storage/tajo-storage-hbase/pom.xml
@@ -112,26 +112,27 @@
         </executions>
       </plugin>
       <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>exec-maven-plugin</artifactId>
-        <version>1.2</version>
+        <groupId>com.github.os72</groupId>
+        <artifactId>protoc-jar-maven-plugin</artifactId>
+        <version>3.5.0</version>
         <executions>
           <execution>
-            <id>generate-sources</id>
             <phase>generate-sources</phase>
-            <configuration>
-              <executable>protoc</executable>
-              <arguments>
-                <argument>-Isrc/main/proto/</argument>
-                <argument>--proto_path=../../tajo-common/src/main/proto</argument>
-                <argument>--proto_path=../../tajo-catalog/tajo-catalog-common/src/main/proto</argument>
-                <argument>--java_out=target/generated-sources/proto</argument>
-                <argument>src/main/proto/StorageFragmentProtos.proto</argument>
-              </arguments>
-            </configuration>
             <goals>
-              <goal>exec</goal>
+              <goal>run</goal>
             </goals>
+            <configuration>
+              <protocVersion>2.5.0</protocVersion>
+              <includeStdTypes>true</includeStdTypes>
+              <inputDirectories>
+                <include>src/main/proto/</include>
+              </inputDirectories>
+              <includeDirectories>
+                <includeDirectory>../../tajo-common/src/main/proto</includeDirectory>
+                <includeDirectory>../../tajo-catalog/tajo-catalog-common/src/main/proto</includeDirectory>
+              </includeDirectories>
+              <outputDirectory>target/generated-sources/proto</outputDirectory>
+            </configuration>
           </execution>
         </executions>
       </plugin>
diff --git a/tajo-storage/tajo-storage-hdfs/pom.xml b/tajo-storage/tajo-storage-hdfs/pom.xml
index aa6e6a6..5542d9c 100644
--- a/tajo-storage/tajo-storage-hdfs/pom.xml
+++ b/tajo-storage/tajo-storage-hdfs/pom.xml
@@ -113,26 +113,27 @@
         </executions>
       </plugin>
       <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>exec-maven-plugin</artifactId>
-        <version>1.2</version>
+        <groupId>com.github.os72</groupId>
+        <artifactId>protoc-jar-maven-plugin</artifactId>
+        <version>3.5.0</version>
         <executions>
           <execution>
-            <id>generate-sources</id>
             <phase>generate-sources</phase>
-            <configuration>
-              <executable>protoc</executable>
-              <arguments>
-                <argument>-Isrc/main/proto/</argument>
-                <argument>--proto_path=../../tajo-common/src/main/proto</argument>
-                <argument>--proto_path=../../tajo-catalog/tajo-catalog-common/src/main/proto</argument>
-                <argument>--java_out=target/generated-sources/proto</argument>
-                <argument>src/main/proto/StorageFragmentProtos.proto</argument>
-              </arguments>
-            </configuration>
             <goals>
-              <goal>exec</goal>
+              <goal>run</goal>
             </goals>
+            <configuration>
+              <protocVersion>2.5.0</protocVersion>
+              <includeStdTypes>true</includeStdTypes>
+              <inputDirectories>
+                <include>src/main/proto/</include>
+              </inputDirectories>
+              <includeDirectories>
+                <includeDirectory>../../tajo-common/src/main/proto</includeDirectory>
+                <includeDirectory>../../tajo-catalog/tajo-catalog-common/src/main/proto</includeDirectory>
+              </includeDirectories>
+              <outputDirectory>target/generated-sources/proto</outputDirectory>
+            </configuration>
           </execution>
         </executions>
       </plugin>
diff --git a/tajo-storage/tajo-storage-jdbc/pom.xml b/tajo-storage/tajo-storage-jdbc/pom.xml
index 804cad4..ecf71e3 100644
--- a/tajo-storage/tajo-storage-jdbc/pom.xml
+++ b/tajo-storage/tajo-storage-jdbc/pom.xml
@@ -111,26 +111,27 @@
         </executions>
       </plugin>
       <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>exec-maven-plugin</artifactId>
-        <version>1.2</version>
+        <groupId>com.github.os72</groupId>
+        <artifactId>protoc-jar-maven-plugin</artifactId>
+        <version>3.5.0</version>
         <executions>
           <execution>
-            <id>generate-sources</id>
             <phase>generate-sources</phase>
-            <configuration>
-              <executable>protoc</executable>
-              <arguments>
-                <argument>-Isrc/main/proto/</argument>
-                <argument>--proto_path=../../tajo-common/src/main/proto</argument>
-                <argument>--proto_path=../../tajo-catalog/tajo-catalog-common/src/main/proto</argument>
-                <argument>--java_out=target/generated-sources/proto</argument>
-                <argument>src/main/proto/JdbcFragmentProtos.proto</argument>
-              </arguments>
-            </configuration>
             <goals>
-              <goal>exec</goal>
+              <goal>run</goal>
             </goals>
+            <configuration>
+              <protocVersion>2.5.0</protocVersion>
+              <includeStdTypes>true</includeStdTypes>
+              <inputDirectories>
+                <include>src/main/proto/</include>
+              </inputDirectories>
+              <includeDirectories>
+                <includeDirectory>../../tajo-common/src/main/proto</includeDirectory>
+                <includeDirectory>../../tajo-catalog/tajo-catalog-common/src/main/proto</includeDirectory>
+              </includeDirectories>
+              <outputDirectory>target/generated-sources/proto</outputDirectory>
+            </configuration>
           </execution>
         </executions>
       </plugin>
diff --git a/tajo-storage/tajo-storage-kafka/pom.xml b/tajo-storage/tajo-storage-kafka/pom.xml
index ab93e0b..4fe6750 100644
--- a/tajo-storage/tajo-storage-kafka/pom.xml
+++ b/tajo-storage/tajo-storage-kafka/pom.xml
@@ -100,26 +100,27 @@
         </executions>
       </plugin>
       <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>exec-maven-plugin</artifactId>
-        <version>1.2</version>
+        <groupId>com.github.os72</groupId>
+        <artifactId>protoc-jar-maven-plugin</artifactId>
+        <version>3.5.0</version>
         <executions>
           <execution>
-            <id>generate-sources</id>
             <phase>generate-sources</phase>
-            <configuration>
-              <executable>protoc</executable>
-              <arguments>
-                <argument>-Isrc/main/proto/</argument>
-                <argument>--proto_path=../../tajo-common/src/main/proto</argument>
-                <argument>--proto_path=../../tajo-catalog/tajo-catalog-common/src/main/proto</argument>
-                <argument>--java_out=target/generated-sources/proto</argument>
-                <argument>src/main/proto/StorageFragmentProtos.proto</argument>
-              </arguments>
-            </configuration>
             <goals>
-              <goal>exec</goal>
+              <goal>run</goal>
             </goals>
+            <configuration>
+              <protocVersion>2.5.0</protocVersion>
+              <includeStdTypes>true</includeStdTypes>
+              <inputDirectories>
+                <include>src/main/proto/</include>
+              </inputDirectories>
+              <includeDirectories>
+                <includeDirectory>../../tajo-common/src/main/proto</includeDirectory>
+                <includeDirectory>../../tajo-catalog/tajo-catalog-common/src/main/proto</includeDirectory>
+              </includeDirectories>
+              <outputDirectory>target/generated-sources/proto</outputDirectory>
+            </configuration>
           </execution>
         </executions>
       </plugin>
diff --git a/tajo-tablespace-example/pom.xml b/tajo-tablespace-example/pom.xml
index 7e15e0c..a38ba19 100644
--- a/tajo-tablespace-example/pom.xml
+++ b/tajo-tablespace-example/pom.xml
@@ -87,26 +87,27 @@
         </executions>
       </plugin>
       <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>exec-maven-plugin</artifactId>
-        <version>1.2</version>
+        <groupId>com.github.os72</groupId>
+        <artifactId>protoc-jar-maven-plugin</artifactId>
+        <version>3.5.0</version>
         <executions>
           <execution>
-            <id>generate-sources</id>
             <phase>generate-sources</phase>
-            <configuration>
-              <executable>protoc</executable>
-              <arguments>
-                <argument>-Isrc/main/proto/</argument>
-                <argument>--proto_path=../tajo-common/src/main/proto</argument>
-                <argument>--proto_path=../tajo-catalog/tajo-catalog-common/src/main/proto</argument>
-                <argument>--java_out=target/generated-sources/proto</argument>
-                <argument>src/main/proto/ExampleHttpFragmentProtos.proto</argument>
-              </arguments>
-            </configuration>
             <goals>
-              <goal>exec</goal>
+              <goal>run</goal>
             </goals>
+            <configuration>
+              <protocVersion>2.5.0</protocVersion>
+              <includeStdTypes>true</includeStdTypes>
+              <inputDirectories>
+                <include>src/main/proto/</include>
+              </inputDirectories>
+              <includeDirectories>
+                <includeDirectory>../tajo-common/src/main/proto</includeDirectory>
+                <includeDirectory>../tajo-catalog/tajo-catalog-common/src/main/proto</includeDirectory>
+              </includeDirectories>
+              <outputDirectory>target/generated-sources/proto</outputDirectory>
+            </configuration>
           </execution>
         </executions>
       </plugin>