diff --git a/LICENSE b/LICENSE
index a356a96..8dada3e 100644
--- a/LICENSE
+++ b/LICENSE
@@ -199,12 +199,3 @@
    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.
-
-========================================================================
-BSD licenses
-========================================================================
-
-The following components are provided under a BSD license. See project link for details.
-The text of each license is also included at licenses/LICENSE-[project].txt.
-
-   proto files from gogo: https://github.com/gogo/protobuf  BSD-2
\ No newline at end of file
diff --git a/mock-collector/bin/fetch_code.sh b/mock-collector/bin/fetch_code.sh
new file mode 100644
index 0000000..bd301cf
--- /dev/null
+++ b/mock-collector/bin/fetch_code.sh
@@ -0,0 +1,21 @@
+#!/usr/bin/env 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.
+
+git clone $2 $1
+
+cd $1 && git checkout $3
\ No newline at end of file
diff --git a/mock-collector/pom.xml b/mock-collector/pom.xml
index d5e931d..f448334 100644
--- a/mock-collector/pom.xml
+++ b/mock-collector/pom.xml
@@ -30,11 +30,13 @@
     <artifactId>mock-collector</artifactId>
     <packaging>jar</packaging>
 
-    <name>SkyWalking-Mock-Collector</name>
+    <name>SkyWalking Mock Collector</name>
     <url>http://maven.apache.org</url>
 
     <properties>
-        <repos.protocol>https://github.com/apache/skywalking-data-collect-protocol.git</repos.protocol>
+        <protocol.version>7e135257720bd61e70d12ba69bda9c90c131e09f</protocol.version>
+        <protocol.workingDirectory>${project.basedir}/target/protocol</protocol.workingDirectory>
+        <protocol.repos>https://github.com/apache/skywalking-data-collect-protocol.git</protocol.repos>
     </properties>
 
     <dependencies>
@@ -53,6 +55,31 @@
                 </exclusion>
             </exclusions>
         </dependency>
+        <dependency>
+            <groupId>io.grpc</groupId>
+            <artifactId>grpc-protobuf</artifactId>
+            <version>${grpc.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.grpc</groupId>
+            <artifactId>grpc-stub</artifactId>
+            <version>${grpc.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.netty</groupId>
+            <artifactId>netty-codec-http2</artifactId>
+            <version>${netty.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-server</artifactId>
+            <version>${jetty.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-servlet</artifactId>
+            <version>${jetty.version}</version>
+        </dependency>
     </dependencies>
 
     <build>
@@ -66,16 +93,6 @@
         </extensions>
         <plugins>
             <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>${maven-compiler-plugin.version}</version>
-                <configuration>
-                    <source>${maven.compiler.source}</source>
-                    <target>${maven.compiler.source}</target>
-                    <encoding>${project.build.sourceEncoding}</encoding>
-                </configuration>
-            </plugin>
-<!--            <plugin>
                 <groupId>org.codehaus.mojo</groupId>
                 <artifactId>exec-maven-plugin</artifactId>
                 <version>1.6.0</version>
@@ -88,16 +105,15 @@
                     </execution>
                 </executions>
                 <configuration>
-                    <executable>git</executable>
+                    <executable>bash</executable>
                     <arguments>
-                        <argument>clone</argument>
-                        <argument>-b</argument>
-                        <argument>master</argument>
-                        <argument>${repos.protocol}</argument>
-                        <argument>${project.basedir}/target/proto</argument>
+                        <argument>${project.basedir}/bin/fetch_code.sh</argument>
+                        <argument>${protocol.workingDirectory}</argument>
+                        <argument>${protocol.repos}</argument>
+                        <argument>${protocol.version}</argument>
                     </arguments>
                 </configuration>
-            </plugin>-->
+            </plugin>
             <plugin>
                 <groupId>org.xolstice.maven.plugins</groupId>
                 <artifactId>protobuf-maven-plugin</artifactId>
@@ -106,6 +122,7 @@
                     <protocArtifact>com.google.protobuf:protoc:3.3.0:exe:${os.detected.classifier}</protocArtifact>
                     <pluginId>grpc-java</pluginId>
                     <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.4.0:exe:${os.detected.classifier}</pluginArtifact>
+                    <protoSourceRoot>${protocol.workingDirectory}</protoSourceRoot>
                 </configuration>
                 <executions>
                     <execution>
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/MockRegisterService.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/MockRegisterService.java
index 33df6f8..9374fa9 100644
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/MockRegisterService.java
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/MockRegisterService.java
@@ -23,7 +23,7 @@
 import org.apache.skywalking.apm.network.common.KeyIntValuePair;
 import org.apache.skywalking.apm.network.register.v2.Endpoint;
 import org.apache.skywalking.apm.network.register.v2.EndpointMapping;
-import org.apache.skywalking.apm.network.register.v2.Enpoints;
+import org.apache.skywalking.apm.network.register.v2.Endpoints;
 import org.apache.skywalking.apm.network.register.v2.NetAddressMapping;
 import org.apache.skywalking.apm.network.register.v2.NetAddresses;
 import org.apache.skywalking.apm.network.register.v2.RegisterGrpc;
@@ -41,7 +41,7 @@
     private Logger logger = LogManager.getLogger(MockTraceSegmentService.class);
 
     @Override
-    public void doEndpointRegister(Enpoints request, StreamObserver<EndpointMapping> responseObserver) {
+    public void doEndpointRegister(Endpoints request, StreamObserver<EndpointMapping> responseObserver) {
         for (Endpoint endpoint : request.getEndpointsList()) {
             ValidateData.INSTANCE.getRegistryItem()
                                  .registryOperationName(new RegistryItem.OperationName(endpoint.getServiceId(), endpoint
diff --git a/mock-collector/src/main/proto/README.md b/mock-collector/src/main/proto/README.md
deleted file mode 100644
index 536bc1f..0000000
--- a/mock-collector/src/main/proto/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# Apache SkyWalking data collect protocol
-Apache SkyWalking can collect data from different sources. Each kind of source should follow the protocols in this repo.
-
-## License
-Apache 2.0
diff --git a/mock-collector/src/main/proto/common/CLR.proto b/mock-collector/src/main/proto/common/CLR.proto
deleted file mode 100644
index 57bc860..0000000
--- a/mock-collector/src/main/proto/common/CLR.proto
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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.
- *
- */
-
-syntax = "proto3";
-
-option java_multiple_files = true;
-option java_package = "org.apache.skywalking.apm.network.language.agent";
-option csharp_namespace = "SkyWalking.NetworkProtocol";
-
-import "common/common.proto";
-
-message CLRMetric {
-    int64 time = 1;
-    CPU cpu = 2;
-    ClrGC gc = 3;
-    ClrThread thread = 4;
-}
-
-message ClrGC {
-    int64 Gen0CollectCount = 1;
-    int64 Gen1CollectCount = 2;
-    int64 Gen2CollectCount = 3;
-    int64 HeapMemory = 4;
-}
-
-message ClrThread {
-    int32 AvailableCompletionPortThreads = 1;
-    int32 AvailableWorkerThreads = 2;
-    int32 MaxCompletionPortThreads = 3;
-    int32 MaxWorkerThreads = 4;
-}
\ No newline at end of file
diff --git a/mock-collector/src/main/proto/common/JVM.proto b/mock-collector/src/main/proto/common/JVM.proto
deleted file mode 100644
index 543c640..0000000
--- a/mock-collector/src/main/proto/common/JVM.proto
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * 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.
- *
- */
-
-syntax = "proto3";
-
-option java_multiple_files = true;
-option java_package = "org.apache.skywalking.apm.network.language.agent";
-option csharp_namespace = "SkyWalking.NetworkProtocol";
-
-import "common/common.proto";
-
-message JVMMetric {
-    int64 time = 1;
-    CPU cpu = 2;
-    repeated Memory memory = 3;
-    repeated MemoryPool memoryPool = 4;
-    repeated GC gc = 5;
-}
-
-message Memory {
-    bool isHeap = 1;
-    int64 init = 2;
-    int64 max = 3;
-    int64 used = 4;
-    int64 committed = 5;
-}
-
-message MemoryPool {
-    PoolType type = 1;
-    int64 init = 2;
-    int64 max = 3;
-    int64 used = 4;
-    int64 commited = 5;
-}
-
-enum PoolType {
-    CODE_CACHE_USAGE = 0;
-    NEWGEN_USAGE = 1;
-    OLDGEN_USAGE = 2;
-    SURVIVOR_USAGE = 3;
-    PERMGEN_USAGE = 4;
-    METASPACE_USAGE = 5;
-}
-
-message GC {
-    GCPhrase phrase = 1;
-    int64 count = 2;
-    int64 time = 3;
-}
-
-enum GCPhrase {
-    NEW = 0;
-    OLD = 1;
-}
diff --git a/mock-collector/src/main/proto/common/common.proto b/mock-collector/src/main/proto/common/common.proto
deleted file mode 100644
index ce50c76..0000000
--- a/mock-collector/src/main/proto/common/common.proto
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * 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.
- *
- */
-
-syntax = "proto3";
-
-option java_multiple_files = true;
-option java_package = "org.apache.skywalking.apm.network.common";
-option csharp_namespace = "SkyWalking.NetworkProtocol";
-
-message KeyStringValuePair {
-    string key = 1;
-    string value = 2;
-}
-
-message KeyIntValuePair {
-    string key = 1;
-    int32 value = 2;
-}
-
-message CPU {
-    double usagePercent = 2;
-}
-
-// In most cases, detect point should be `server` or `client`.
-// Even in service mesh, this means `server`/`client` side sidecar
-// `proxy` is reserved only.
-enum DetectPoint {
-    client = 0;
-    server = 1;
-    proxy = 2;
-}
-
-message Commands {
-    repeated Command commands = 1;
-}
-
-message Command {
-    string command = 1;
-    repeated KeyStringValuePair args = 2;
-}
diff --git a/mock-collector/src/main/proto/common/trace-common.proto b/mock-collector/src/main/proto/common/trace-common.proto
deleted file mode 100644
index dcbe03d..0000000
--- a/mock-collector/src/main/proto/common/trace-common.proto
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * 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.
- *
- */
-
-syntax = "proto3";
-
-option java_multiple_files = true;
-option java_package = "org.apache.skywalking.apm.network.language.agent";
-option csharp_namespace = "SkyWalking.NetworkProtocol";
-
-message UpstreamSegment {
-    repeated UniqueId globalTraceIds = 1;
-    bytes segment = 2; // the byte array of TraceSegmentObject
-}
-
-enum SpanType {
-    Entry = 0;
-    Exit = 1;
-    Local = 2;
-}
-
-message UniqueId {
-    repeated int64 idParts = 1;
-}
-
-enum RefType {
-    CrossProcess = 0;
-    CrossThread = 1;
-}
-
-enum SpanLayer {
-    Unknown = 0;
-    Database = 1;
-    RPCFramework = 2;
-    Http = 3;
-    MQ = 4;
-    Cache = 5;
-}
diff --git a/mock-collector/src/main/proto/language-agent-v2/CLRMetric.proto b/mock-collector/src/main/proto/language-agent-v2/CLRMetric.proto
deleted file mode 100644
index da023b6..0000000
--- a/mock-collector/src/main/proto/language-agent-v2/CLRMetric.proto
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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.
- *
- */
-
-syntax = "proto3";
-
-option java_multiple_files = true;
-option java_package = "org.apache.skywalking.apm.network.language.agent.v2";
-option csharp_namespace = "SkyWalking.NetworkProtocol";
-
-import "common/common.proto";
-import "common/CLR.proto";
-
-service CLRMetricReportService {
-    rpc collect (CLRMetricCollection) returns (Commands) {
-    }
-}
-
-message CLRMetricCollection {
-    repeated CLRMetric metrics = 1;
-    int32 serviceInstanceId = 2;
-}
\ No newline at end of file
diff --git a/mock-collector/src/main/proto/language-agent-v2/JVMMetric.proto b/mock-collector/src/main/proto/language-agent-v2/JVMMetric.proto
deleted file mode 100644
index 845624c..0000000
--- a/mock-collector/src/main/proto/language-agent-v2/JVMMetric.proto
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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.
- *
- */
-
-syntax = "proto3";
-
-option java_multiple_files = true;
-option java_package = "org.apache.skywalking.apm.network.language.agent.v2";
-option csharp_namespace = "SkyWalking.NetworkProtocol";
-
-import "common/common.proto";
-import "common/JVM.proto";
-
-service JVMMetricReportService {
-    rpc collect (JVMMetricCollection) returns (Commands) {
-    }
-}
-
-message JVMMetricCollection {
-    repeated JVMMetric metrics = 1;
-    int32 serviceInstanceId = 2;
-}
diff --git a/mock-collector/src/main/proto/language-agent-v2/trace.proto b/mock-collector/src/main/proto/language-agent-v2/trace.proto
deleted file mode 100644
index c6120c5..0000000
--- a/mock-collector/src/main/proto/language-agent-v2/trace.proto
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * 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.
- *
- */
-
-syntax = "proto3";
-
-option java_multiple_files = true;
-option java_package = "org.apache.skywalking.apm.network.language.agent.v2";
-option csharp_namespace = "SkyWalking.NetworkProtocol";
-
-import "common/common.proto";
-import "common/trace-common.proto";
-
-service TraceSegmentReportService {
-    rpc collect (stream UpstreamSegment) returns (Commands) {
-    }
-}
-
-message SegmentObject {
-    UniqueId traceSegmentId = 1;
-    repeated SpanObjectV2 spans = 2;
-    int32 serviceId = 3;
-    int32 serviceInstanceId = 4;
-    bool isSizeLimited = 5;
-}
-
-message SegmentReference {
-    RefType refType = 1;
-    UniqueId parentTraceSegmentId = 2;
-    int32 parentSpanId = 3;
-    int32 parentServiceInstanceId = 4;
-    string networkAddress = 5;
-    int32 networkAddressId = 6;
-    int32 entryServiceInstanceId = 7;
-    string entryEndpoint = 8;
-    int32 entryEndpointId = 9;
-    string parentEndpoint = 10;
-    int32 parentEndpointId = 11;
-}
-
-message SpanObjectV2 {
-    int32 spanId = 1;
-    int32 parentSpanId = 2;
-    int64 startTime = 3;
-    int64 endTime = 4;
-    repeated SegmentReference refs = 5;
-    int32 operationNameId = 6;
-    string operationName = 7;
-    int32 peerId = 8;
-    string peer = 9;
-    SpanType spanType = 10;
-    SpanLayer spanLayer = 11;
-    int32 componentId = 12;
-    string component = 13;
-    bool isError = 14;
-    repeated KeyStringValuePair tags = 15;
-    repeated Log logs = 16;
-}
-
-message Log {
-    int64 time = 1;
-    repeated KeyStringValuePair data = 2;
-}
diff --git a/mock-collector/src/main/proto/language-agent/ApplicationRegisterService.proto b/mock-collector/src/main/proto/language-agent/ApplicationRegisterService.proto
deleted file mode 100644
index fd8ee0d..0000000
--- a/mock-collector/src/main/proto/language-agent/ApplicationRegisterService.proto
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.
- *
- */
-
-syntax = "proto3";
-
-option java_multiple_files = true;
-option java_package = "org.apache.skywalking.apm.network.language.agent";
-option csharp_namespace = "SkyWalking.NetworkProtocol";
-
-import "language-agent/KeyWithIntegerValue.proto";
-
-//register service for ApplicationCode, this service is called when service starts.
-service ApplicationRegisterService {
-    rpc applicationCodeRegister (Application) returns (ApplicationMapping) {
-    }
-}
-
-message Application {
-    string applicationCode = 1;
-}
-
-message ApplicationMapping {
-    KeyWithIntegerValue application = 1;
-}
diff --git a/mock-collector/src/main/proto/language-agent/DiscoveryService.proto b/mock-collector/src/main/proto/language-agent/DiscoveryService.proto
deleted file mode 100644
index bc392a7..0000000
--- a/mock-collector/src/main/proto/language-agent/DiscoveryService.proto
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * 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.
- *
- */
-
-syntax = "proto3";
-
-option java_multiple_files = true;
-option java_package = "org.apache.skywalking.apm.network.language.agent";
-option csharp_namespace = "SkyWalking.NetworkProtocol";
-
-import "language-agent/Downstream.proto";
-import "common/trace-common.proto";
-
-service InstanceDiscoveryService {
-    rpc registerInstance (ApplicationInstance) returns (ApplicationInstanceMapping) {
-    }
-
-    rpc heartbeat (ApplicationInstanceHeartbeat) returns (Downstream) {
-    }
-
-}
-
-message ApplicationInstance {
-    int32 applicationId = 1;
-    string agentUUID = 2;
-    int64 registerTime = 3;
-    OSInfo osinfo = 4;
-}
-
-message ApplicationInstanceMapping {
-    int32 applicationId = 1;
-    int32 applicationInstanceId = 2;
-}
-
-message ApplicationInstanceRecover {
-    int32 applicationId = 1;
-    int32 applicationInstanceId = 2;
-    int64 registerTime = 3;
-    OSInfo osinfo = 4;
-}
-
-message ApplicationInstanceHeartbeat {
-    int32 applicationInstanceId = 1;
-    int64 heartbeatTime = 2;
-}
-
-message OSInfo {
-    string osName = 1;
-    string hostname = 2;
-    int32 processNo = 3;
-    repeated string ipv4s = 4;
-}
-
-//discovery service for ServiceName by Network address or application code
-service ServiceNameDiscoveryService {
-    rpc discovery (ServiceNameCollection) returns (ServiceNameMappingCollection) {
-    }
-}
-
-message ServiceNameCollection {
-    repeated ServiceNameElement elements = 1;
-}
-
-message ServiceNameMappingCollection {
-    repeated ServiceNameMappingElement elements = 1;
-}
-
-message ServiceNameMappingElement {
-    int32 serviceId = 1;
-    ServiceNameElement element = 2;
-}
-
-message ServiceNameElement {
-    string serviceName = 1;
-    int32 applicationId = 2;
-    SpanType srcSpanType = 3;
-}
diff --git a/mock-collector/src/main/proto/language-agent/Downstream.proto b/mock-collector/src/main/proto/language-agent/Downstream.proto
deleted file mode 100644
index e7bbb39..0000000
--- a/mock-collector/src/main/proto/language-agent/Downstream.proto
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * 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.
- *
- */
-
-syntax = "proto3";
-
-option java_multiple_files = true;
-option java_package = "org.apache.skywalking.apm.network.language.agent";
-option csharp_namespace = "SkyWalking.NetworkProtocol";
-
-// nothing down stream from collector yet.
-message Downstream {
-}
diff --git a/mock-collector/src/main/proto/language-agent/JVMMetricsService.proto b/mock-collector/src/main/proto/language-agent/JVMMetricsService.proto
deleted file mode 100644
index 229f41a..0000000
--- a/mock-collector/src/main/proto/language-agent/JVMMetricsService.proto
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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.
- *
- */
-
-syntax = "proto3";
-
-option java_multiple_files = true;
-option java_package = "org.apache.skywalking.apm.network.language.agent";
-option csharp_namespace = "SkyWalking.NetworkProtocol";
-
-import "language-agent/Downstream.proto";
-import "common/JVM.proto";
-
-service JVMMetricsService {
-    rpc collect (JVMMetrics) returns (Downstream) {
-    }
-}
-
-message JVMMetrics {
-    repeated JVMMetric metrics = 1;
-    int32 applicationInstanceId = 2;
-}
diff --git a/mock-collector/src/main/proto/language-agent/KeyWithIntegerValue.proto b/mock-collector/src/main/proto/language-agent/KeyWithIntegerValue.proto
deleted file mode 100644
index ed48a54..0000000
--- a/mock-collector/src/main/proto/language-agent/KeyWithIntegerValue.proto
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * 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.
- *
- */
-
-syntax = "proto3";
-
-option java_multiple_files = true;
-option java_package = "org.apache.skywalking.apm.network.language.agent";
-option csharp_namespace = "SkyWalking.NetworkProtocol";
-
-message KeyWithIntegerValue {
-    string key = 1;
-    int32 value = 2;
-}
diff --git a/mock-collector/src/main/proto/language-agent/KeyWithStringValue.proto b/mock-collector/src/main/proto/language-agent/KeyWithStringValue.proto
deleted file mode 100644
index 1114267..0000000
--- a/mock-collector/src/main/proto/language-agent/KeyWithStringValue.proto
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * 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.
- *
- */
-
-syntax = "proto3";
-
-option java_multiple_files = true;
-option java_package = "org.apache.skywalking.apm.network.language.agent";
-option csharp_namespace = "SkyWalking.NetworkProtocol";
-
-message KeyWithStringValue {
-    string key = 1;
-    string value = 2;
-}
diff --git a/mock-collector/src/main/proto/language-agent/NetworkAddressRegisterService.proto b/mock-collector/src/main/proto/language-agent/NetworkAddressRegisterService.proto
deleted file mode 100644
index a299edc..0000000
--- a/mock-collector/src/main/proto/language-agent/NetworkAddressRegisterService.proto
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * 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.
- *
- */
-
-syntax = "proto3";
-
-option java_multiple_files = true;
-option java_package = "org.apache.skywalking.apm.network.language.agent";
-option csharp_namespace = "SkyWalking.NetworkProtocol";
-
-import "language-agent/KeyWithIntegerValue.proto";
-
-service NetworkAddressRegisterService {
-    rpc batchRegister (NetworkAddresses) returns (NetworkAddressMappings) {
-    }
-}
-
-message NetworkAddresses {
-    repeated string addresses = 1;
-}
-
-message NetworkAddressMappings {
-    repeated KeyWithIntegerValue addressIds = 1;
-}
diff --git a/mock-collector/src/main/proto/language-agent/TraceSegmentService.proto b/mock-collector/src/main/proto/language-agent/TraceSegmentService.proto
deleted file mode 100644
index f8566b2..0000000
--- a/mock-collector/src/main/proto/language-agent/TraceSegmentService.proto
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * 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.
- *
- */
-
-syntax = "proto3";
-
-option java_multiple_files = true;
-option java_package = "org.apache.skywalking.apm.network.language.agent";
-option csharp_namespace = "SkyWalking.NetworkProtocol";
-
-import "language-agent/Downstream.proto";
-import "language-agent/KeyWithStringValue.proto";
-import "common/trace-common.proto";
-
-service TraceSegmentService {
-    rpc collect (stream UpstreamSegment) returns (Downstream) {
-    }
-}
-
-message TraceSegmentObject {
-    UniqueId traceSegmentId = 1;
-    repeated SpanObject spans = 2;
-    int32 applicationId = 3;
-    int32 applicationInstanceId = 4;
-    bool isSizeLimited = 5;
-}
-
-message TraceSegmentReference {
-    RefType refType = 1;
-    UniqueId parentTraceSegmentId = 2;
-    int32 parentSpanId = 3;
-    int32 parentApplicationInstanceId = 4;
-    string networkAddress = 5;
-    int32 networkAddressId = 6;
-    int32 entryApplicationInstanceId = 7;
-    string entryServiceName = 8;
-    int32 entryServiceId = 9;
-    string parentServiceName = 10;
-    int32 parentServiceId = 11;
-}
-
-message SpanObject {
-    int32 spanId = 1;
-    int32 parentSpanId = 2;
-    int64 startTime = 3;
-    int64 endTime = 4;
-    repeated TraceSegmentReference refs = 5;
-    int32 operationNameId = 6;
-    string operationName = 7;
-    int32 peerId = 8;
-    string peer = 9;
-    SpanType spanType = 10;
-    SpanLayer spanLayer = 11;
-    int32 componentId = 12;
-    string component = 13;
-    bool isError = 14;
-    repeated KeyWithStringValue tags = 15;
-    repeated LogMessage logs = 16;
-}
-
-message LogMessage {
-    int64 time = 1;
-    repeated KeyWithStringValue data = 2;
-}
diff --git a/mock-collector/src/main/proto/register/InstancePing.proto b/mock-collector/src/main/proto/register/InstancePing.proto
deleted file mode 100644
index 3a8ffe1..0000000
--- a/mock-collector/src/main/proto/register/InstancePing.proto
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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.
- *
- */
-
-syntax = "proto3";
-
-option java_multiple_files = true;
-option java_package = "org.apache.skywalking.apm.network.register.v2";
-option csharp_namespace = "SkyWalking.NetworkProtocol";
-
-import "common/common.proto";
-
-service ServiceInstancePing {
-    rpc doPing (ServiceInstancePingPkg) returns (Commands) {
-    }
-}
-
-message ServiceInstancePingPkg {
-    int32 serviceInstanceId = 1;
-    int64 time = 2;
-    string serviceInstanceUUID = 3;
-}
diff --git a/mock-collector/src/main/proto/register/Register.proto b/mock-collector/src/main/proto/register/Register.proto
deleted file mode 100644
index aff9ea5..0000000
--- a/mock-collector/src/main/proto/register/Register.proto
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * 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.
- *
- */
-
-syntax = "proto3";
-
-option java_multiple_files = true;
-option java_package = "org.apache.skywalking.apm.network.register.v2";
-option csharp_namespace = "SkyWalking.NetworkProtocol";
-
-import "common/common.proto";
-
-//register service for ApplicationCode, this service is called when service starts.
-service Register {
-    rpc doServiceRegister (Services) returns (ServiceRegisterMapping) {
-    }
-
-    rpc doServiceInstanceRegister (ServiceInstances) returns (ServiceInstanceRegisterMapping) {
-    }
-
-    rpc doEndpointRegister (Enpoints) returns (EndpointMapping) {
-    }
-
-    rpc doNetworkAddressRegister (NetAddresses) returns (NetAddressMapping) {
-    }
-
-    rpc doServiceAndNetworkAddressMappingRegister (ServiceAndNetworkAddressMappings) returns(Commands) {
-    }
-}
-
-// Service register
-message Services {
-    repeated Service services = 1;
-}
-
-message Service {
-    string serviceName = 1;
-    repeated KeyStringValuePair tags = 3;
-    repeated KeyStringValuePair properties = 4;
-}
-
-message ServiceRegisterMapping {
-    repeated KeyIntValuePair services = 1;
-}
-
-// Service Instance register
-message ServiceInstances {
-    repeated ServiceInstance instances = 1;
-}
-
-message ServiceInstance {
-    int32 serviceId = 1;
-    string instanceUUID = 2;
-    int64 time = 3;
-    repeated KeyStringValuePair tags = 4;
-    repeated KeyStringValuePair properties = 5;
-}
-
-message ServiceInstanceRegisterMapping {
-    repeated KeyIntValuePair serviceInstances = 1;
-}
-
-// Network address register
-
-// Only known use case is the language agent.
-// Network address represents the ip/hostname:port, which is usually used at client side of RPC.
-message NetAddresses {
-    repeated string addresses = 1;
-}
-
-message NetAddressMapping {
-    repeated KeyIntValuePair addressIds = 1;
-}
-
-// Endpint register
-message Enpoints {
-    repeated Endpoint endpoints = 1;
-}
-
-message Endpoint {
-    int32 serviceId = 1;
-    string endpointName = 2;
-    repeated KeyStringValuePair tags = 3;
-    repeated KeyStringValuePair properties = 4;
-    // For endpoint
-    // from DetectPoint is either `client` or `server`. No chance to be `proxy`.
-    DetectPoint from = 5;
-}
-
-message EndpointMapping {
-    repeated EndpointMappingElement elements = 1;
-}
-
-message EndpointMappingElement {
-    int32 serviceId = 1;
-    string endpointName = 2;
-    int32 endpointId = 3;
-    DetectPoint from = 4;
-}
-
-message ServiceAndNetworkAddressMappings {
-    repeated ServiceAndNetworkAddressMapping mappings = 1;
-}
-
-message ServiceAndNetworkAddressMapping {
-    int32 serviceId = 1;
-    int32 serviceInstanceId = 2;
-    string networkAddress = 3;
-    int32 networkAddressId = 4;
-}
diff --git a/mock-collector/src/main/proto/service-mesh-probe/istio/skywalking.config.pb.html b/mock-collector/src/main/proto/service-mesh-probe/istio/skywalking.config.pb.html
deleted file mode 100644
index a92c804..0000000
--- a/mock-collector/src/main/proto/service-mesh-probe/istio/skywalking.config.pb.html
+++ /dev/null
@@ -1,39 +0,0 @@
----
-title: Apache SkyWalking
-description: Adapter to deliver metrics to Apache SkyWalking.
-location: https://istio.io/docs/reference/config/policy-and-telemetry/adapters/apache-skywalking.html
-layout: protoc-gen-docs
-generator: protoc-gen-docs
-provider: Apache SkyWalking
-contact_email: dev@skywalking.apache.org
-support_link:
-source_link: https://github.com/apache/skywalking
-latest_release_link: https://skywalking.apache.org/downloads/
-helm_chart_link:
-istio_versions: "1.0.3, 1.0.4, 1.1.0, 1.1.1"
-supported_templates: metric
-logo_link: https://github.com/apache/skywalking-website/raw/master/docs/.vuepress/public/assets/logo.svg
-number_of_entries: 1
----
-
-<!-- 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. -->
-
-<p>The SkyWalking adapter uses the <code>Istio bypass</code> adapter to collect metrics and make them available to
-<a href="https://skywalking.apache.org/">Apache SkyWalking</a>. SkyWalking provides a topology map and metrics graph 
-to visualize the whole mesh.</p>
-
-<p>This adapter supports the <a href="https://istio.io/docs/reference/config/policy-and-telemetry/templates/metric/">metric template</a>.</p>
-
-<p>Follow the <a href="https://github.com/apache/skywalking/blob/master/docs/README.md">official Apache SkyWalking documentation</a> 
-and <a href="https://github.com/apache/skywalking-kubernetes">SkyWalking k8s documentation</a> for details on configuring SkyWalking and the Istio bypass adapter.</p>
diff --git a/mock-collector/src/main/proto/service-mesh-probe/service-mesh.proto b/mock-collector/src/main/proto/service-mesh-probe/service-mesh.proto
deleted file mode 100644
index 87e0b70..0000000
--- a/mock-collector/src/main/proto/service-mesh-probe/service-mesh.proto
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 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.
- *
- */
-
-syntax = "proto3";
-
-option java_multiple_files = true;
-option java_package = "org.apache.skywalking.apm.network.servicemesh";
-
-import "common/common.proto";
-
-service ServiceMeshMetricService {
-    rpc collect(stream ServiceMeshMetric) returns (MeshProbeDownstream) {
-    }
-}
-
-message ServiceMeshMetric {
-    int64 startTime = 1;
-    int64 endTime = 2;
-    string sourceServiceName = 3;
-    int32 sourceServiceId = 4;
-    string sourceServiceInstance = 5;
-    int32 sourceServiceInstanceId = 6;
-    string destServiceName = 7;
-    int32 destServiceId = 8;
-    string destServiceInstance = 9;
-    int32 destServiceInstanceId = 10;
-    string endpoint = 11;
-    int32 latency = 12;
-    int32 responseCode = 13;
-    bool status = 14;
-    Protocol protocol = 15;
-    DetectPoint detectPoint = 16;
-}
-
-enum Protocol {
-    HTTP = 0;
-    gRPC = 1;
-}
-
-message MeshProbeDownstream {
-}
diff --git a/pom.xml b/pom.xml
index e9d36de..6898c1e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -63,32 +63,32 @@
                 <version>${junit.version}</version>
                 <scope>test</scope>
             </dependency>
-
             <dependency>
                 <groupId>com.google.guava</groupId>
                 <artifactId>guava</artifactId>
                 <version>${guava.version}</version>
             </dependency>
-
             <dependency>
                 <groupId>org.apache.logging.log4j</groupId>
                 <artifactId>log4j-core</artifactId>
                 <version>${log4j-core.version}</version>
             </dependency>
-
             <dependency>
                 <groupId>org.apache.logging.log4j</groupId>
                 <artifactId>log4j-api</artifactId>
                 <version>${log4j-core.version}</version>
             </dependency>
-
             <dependency>
                 <groupId>org.projectlombok</groupId>
                 <artifactId>lombok</artifactId>
                 <version>${lombok.version}</version>
                 <scope>provided</scope>
             </dependency>
-
+            <dependency>
+                <groupId>org.yaml</groupId>
+                <artifactId>snakeyaml</artifactId>
+                <version>${snakeyaml.version}</version>
+            </dependency>
             <dependency>
                 <groupId>com.google.code.gson</groupId>
                 <artifactId>gson</artifactId>
@@ -107,67 +107,49 @@
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
-            <version>${junit.version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
-            <version>${guava.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.yaml</groupId>
-            <artifactId>snakeyaml</artifactId>
-            <version>${snakeyaml.version}</version>
         </dependency>
         <dependency>
             <groupId>org.apache.logging.log4j</groupId>
             <artifactId>log4j-core</artifactId>
-            <version>${log4j-core.version}</version>
         </dependency>
         <dependency>
             <groupId>org.apache.logging.log4j</groupId>
             <artifactId>log4j-api</artifactId>
-            <version>${log4j-core.version}</version>
         </dependency>
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
-            <version>${lombok.version}</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>com.google.code.gson</groupId>
             <artifactId>gson</artifactId>
-            <version>${gson.version}</version>
         </dependency>
         <dependency>
-            <groupId>io.grpc</groupId>
-            <artifactId>grpc-protobuf</artifactId>
-            <version>${grpc.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>io.grpc</groupId>
-            <artifactId>grpc-stub</artifactId>
-            <version>${grpc.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-codec-http2</artifactId>
-            <version>${netty.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-server</artifactId>
-            <version>${jetty.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-servlet</artifactId>
-            <version>${jetty.version}</version>
+            <groupId>org.yaml</groupId>
+            <artifactId>snakeyaml</artifactId>
         </dependency>
     </dependencies>
     <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-compiler-plugin</artifactId>
+                    <version>${maven-compiler-plugin.version}</version>
+                    <configuration>
+                        <source>${maven.compiler.source}</source>
+                        <target>${maven.compiler.source}</target>
+                        <encoding>${project.build.sourceEncoding}</encoding>
+                    </configuration>
+                </plugin>
+            </plugins>
+        </pluginManagement>
         <plugins>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
diff --git a/validator/pom.xml b/validator/pom.xml
index 9899ac0..26c4001 100644
--- a/validator/pom.xml
+++ b/validator/pom.xml
@@ -29,16 +29,9 @@
     <artifactId>validator</artifactId>
     <packaging>jar</packaging>
 
-    <name>SkyWalking-Validator</name>
+    <name>SkyWalking Validator</name>
     <url>http://maven.apache.org</url>
 
-    <dependencies>
-        <dependency>
-            <groupId>org.yaml</groupId>
-            <artifactId>snakeyaml</artifactId>
-        </dependency>
-    </dependencies>
-
     <build>
         <finalName>validator</finalName>
         <plugins>
