You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2021/02/04 06:54:39 UTC

[dubbo-spi-extensions] 13/44: 修改README.md,修改打包脚本,修改部分名称, 调整pom

This is an automated email from the ASF dual-hosted git repository.

liujun pushed a commit to branch 2.7.x
in repository https://gitbox.apache.org/repos/asf/dubbo-spi-extensions.git

commit 213b1dc72f20cfbf206322e55fdfe55e46ef6bde
Author: qq213539 <21...@qq.com>
AuthorDate: Sun Nov 15 21:10:42 2020 +0800

    修改README.md,修改打包脚本,修改部分名称, 调整pom
---
 dubbo-api-docs/README.md                           |  69 +++++------------
 dubbo-api-docs/README_ch.md                        |  71 +++++------------
 dubbo-api-docs/distribution/bin/shutdown.cmd       |   2 +-
 dubbo-api-docs/distribution/bin/startup.cmd        |   2 +-
 dubbo-api-docs/distribution/bin/startup.sh         |   4 +-
 dubbo-api-docs/distribution/pom.xml                |   4 +-
 dubbo-api-docs/dubbo-api-docs-annotations/pom.xml  |   2 +-
 dubbo-api-docs/dubbo-api-docs-core/pom.xml         |   2 +-
 .../dubbo-api-docs-examples/examples-api/pom.xml   |   2 +-
 .../examples-provider-sca/pom.xml                  |   2 +-
 .../examples-provider/pom.xml                      |   2 +-
 dubbo-api-docs/dubbo-api-docs-examples/pom.xml     |   2 +-
 dubbo-api-docs/dubbo-api-docs-ui-server/pom.xml    |  34 ++++-----
 .../src/main/resources/application.yml             |   2 +-
 .../src/main/resources/banner.txt                  |  13 ++--
 .../src/main/resources/log4j2.xml                  |   2 +-
 .../src/main/resources/static/css/index.css        |   2 +-
 .../src/main/resources/static/js/index.js          |  85 ++++++++++++---------
 dubbo-api-docs/pom.xml                             |  16 +++-
 dubbo-api-docs/readmeImgs/DubboDoc.png             | Bin 0 -> 74904 bytes
 20 files changed, 137 insertions(+), 181 deletions(-)

diff --git a/dubbo-api-docs/README.md b/dubbo-api-docs/README.md
index 1a61dab..cb86f20 100644
--- a/dubbo-api-docs/README.md
+++ b/dubbo-api-docs/README.md
@@ -4,24 +4,8 @@
 
 Dubbo api documents, test tools, generate documents according to annotations, and provide test functions
 
-Only some annotations are needed to generate documents similar to swagger, without turning a non web's dubbo project into a web project.
+Adding some annotations can generate a swagger like document without turning a non web Dubbo project into a web project
 
-Welcome everyone to make complaints about it~
-
-At present, the function of the first version is relatively rough (the interface is also rough), and the user experience is not very good. It will be gradually optimized later, and all kinds of PR are welcome~
-
-
-
-```
-When testing Dubbo providers, I always thought that if Dubbo had a document + testing 
-tool similar to swagger
-I've also found that several of them are based on springfox, and will add some restful 
-interfaces to Dubbo project,if your Dubbo service itself is started through a web container 
-or mixed with web projects, that's fine.
-But my Dubbo projects are all non web projects. For those with obsessive-compulsive disorder, 
-it is a little unacceptable to turn the project into a web project for the purpose of documentation,
-so I have the idea of doing it myself...
-```
 ## Version planning
 ### First edition
 * Parsing annotations and generating UI
@@ -31,18 +15,18 @@ so I have the idea of doing it myself...
 * Add tabs
 * It can save the test and facilitate the next direct loading test
 * Some exceptions are handled as friendly text prompts
-* Add remark.md and show it in the front end
-* Add changelog.md and show it in the front end
+* Add apiRemark.md and show it in the front end
+* Add apiChangelog.md and show it in the front end
 ### Follow up edition
-* Demand  based on own use and issue planning
+* According to user requirements and issue planning
 * Planning according to Dubbo upgrading
 ## Registry center suppor
 * In theory, all registries supported by Dubbo support
 
 ## How to use?
-1. Dubbo doc annotation added to method parameters of Dubbo project
-   * Dubbo provider project introduces Dubbo doc core
-   * If Dubbo's interface and parameters are a separate jar package project, introduce Dubbo doc annotations
+1. Dubbo api docs annotation added to method parameters of Dubbo project
+   * Dubbo provider project introduces dubbo-api-docs-core
+   * If Dubbo's interface and parameters are a separate jar package project, introduce dubbo-api-docs-annotations
 
 ### Current Version: Same as Dubbo version
 ```
@@ -58,19 +42,19 @@ so I have the idea of doing it myself...
     <version>${dubbo-version}</version>
 </dependency>
 ```
-2.Download dubbo-doc-ui-server [Download](https://github.com/KeRan213539/dubboDoc/releases)
+2.Download dubbo-doc-ui-server [Download](https://github.com/apache/dubbo-spi-extensions/releases)
 
-3. Start dubbo-doc-ui-server
+3. Start dubbo-api-docs-ui-server
 
 4. Visit: http:// localhost:8888
    * Port can be modified in application.yml
-   * swagger-ui http:// localhost:8888/swagger-ui.html
+   * swagger-ui http:// localhost:8888/swagger-ui/
 ### Annotation use
-* @DubboApiModule class annotation: dubbo API module information, used to mark the purpose of an interface class module
+* @ApiModule class annotation: dubbo API module information, used to mark the purpose of an interface class module
     * value: module name
     * apiInterface: Provider implemented interface
     * version: module version
-* @DubboApi method annotation: dubbo API information, used to mark the purpose of an dubbo API
+* @ApiDoc method annotation: dubbo API information, used to mark the purpose of an dubbo API
     * value: API name
     * description: API description(HTML tags available)
     * version: API version
@@ -88,14 +72,13 @@ so I have the idea of doing it myself...
 * @ResponseProperty Class attribute annotation: mark response parameters
     * value: parameter name
     * example: example
-### dubbo-doc-ui
+### dubbo-api-docs-ui
 * Get API list direct connection: 
 > Because Dubbo services with different functions may be registered in the same registration center, 
 > but the name of the interface used by Dubbo doc is the same, so the interface of Dubbo doc uses direct 
 connection to obtain the list of different interfaces of different functions.
 
 * The test can be connected directly or through the registration center
-### swagger-ui TODO
 
 ### Use note
 * The response bean (the return type of the interface) supports custom generics, but only one generic placeholder.
@@ -103,30 +86,14 @@ connection to obtain the list of different interfaces of different functions.
 * The API's synchronous / asynchronous is from org.apache.dubbo.config.annotation.Service.async
 
 ## Project structure
-* dubbo-doc-annotations: Document generation annotation project
-* dubbo-doc-core: Responsible for annotation analysis and document information acquisition interface (Dubbo API)
-* dubbo-doc-ui-server: Web service, responsible for displaying doc and providing testing function
-* dubbo-doc-console: The front-end project will be packaged into Dubbo doc UI server project when it is published
-* dubbo-doc-examples: Use example
+* dubbo-api-docs-annotations: Document generation annotation project
+* dubbo-api-docs-core: Responsible for annotation analysis and document information acquisition interface (Dubbo API)
+* dubbo-api-docs-ui-server: Web service, responsible for displaying doc and providing testing function
+* dubbo-api-docs-ui: The front-end project will be packaged into Dubbo doc UI server project when it is published
+* dubbo-api-docs-examples: Use example
 * readmeImgs: Pictures used by README.md
 
 ## Major dependent version
 * spring-boot: 2.3.4.RELEASE
 * dubbo: apache dubbo 2.7.8
 * icework in front(iceworks 4.0)
-
-## What did Dubbo Doc do ?
-### Annotations
-* Define annotations to describe interfaces and parameters
-### In Dubbo projects that need to generate documentation and tests
-* Parsing annotations and caching
-* Add Dubbo API used by Dubbo doc to obtain interface information
-###  dubbo-doc-ui-server
-* Web service
-* Restful API used by front-end UI to obtain interface information (interface list, information of specified interface)
-* Request the restful API of the Dubbo service (using the method of Dubbo generalization call)
-* Save the test and display it next time (implemented in the Second Edition)
-### dubbo-doc-console(Package to dubbo-doc-ui-server when publishing)
-* Get the interface list and display it according to the specified Dubbo service IP and port (direct connection Dubbo service)
-* Get the interface information according to the specified interface and generate the form with DOC (similar to swagger)
-* Show API request response
\ No newline at end of file
diff --git a/dubbo-api-docs/README_ch.md b/dubbo-api-docs/README_ch.md
index 91351ef..fa75434 100644
--- a/dubbo-api-docs/README_ch.md
+++ b/dubbo-api-docs/README_ch.md
@@ -2,22 +2,10 @@
 
 [English](./README.md)
 
-[Gitee镜像](https://gitee.com/213539/dubboDoc)
-
 dubbo 接口文档、测试工具,根据注解生成文档,并提供测试功能.
 
-功能参考 swagger+springfox, 只需要加一些注解就能生成类似swagger的文档, 不会把非web的dubbo项目变为web项目.
-
-欢迎大家吐槽~
+增加一些注解就能生成类似swagger的文档, 不会把非web的dubbo项目变为web项目.
 
-目前第一版功能比较粗糙(界面也粗糙),用户体验不是很好,后面会慢慢优化,也欢迎各种PR~
-
-```
-在测试dubbo提供者的时候,一直在想如果dubbo有一个类似swagger的文档+测试工具就好了.
-也找了一下,找到的几个都是基于springfox的,会在dubbo项目中加一些restful接口,
-如果你的dubbo服务本身就是通过web容器启动或者混合有web项目那还好.
-但是我这边的dubbo项目都是非web项目,对于有强迫症的我来说,为了文档要把项目变成web项目有点无法接受,就有了自己动手的想法...
-```
 ## 版本规划
 ### 第一版
 * 解析注解并生成界面
@@ -27,18 +15,18 @@ dubbo 接口文档、测试工具,根据注解生成文档,并提供测试功能
 * 增加标签页
 * 能保存测试,方便下次直接加载测试
 * 部分异常处理为友好的文字提示
-* 增加 remark.md 并在前端展示
-* 增加 changelog.md 并在前端展示
+* 增加 apiRemark.md 并在前端展示
+* 增加 apiChangelog.md 并在前端展示
 ### 后续版本
-* 根据自用产生的需求和issue规划
+* 根据用户需求和issue规划
 * 根据dubbo升级情况规划
 ## 注册中心支持
 * 理论上dubbo支持的所有注册中心都支持
 
 ## 如何使用?
-1. dubbo项目的方法参数中加上 dubbo doc注解
-   * dubbo提供者项目引入 dubbo-doc-core
-   * 如果dubbo的接口和参数是一个单独的jar包项目,引入dubbo-doc-annotations
+1. dubbo项目的方法参数中加上 dubbo api docs注解
+   * dubbo提供者项目引入 dubbo-api-docs-core
+   * 如果dubbo的接口和参数是一个单独的jar包项目,引入dubbo-api-docs-annotations
    
 ### 当前版本: 同Dubbo版本号
 ```
@@ -50,25 +38,23 @@ dubbo 接口文档、测试工具,根据注解生成文档,并提供测试功能
 
 <dependency>
     <groupId>org.apache.dubbo</groupId>
-                <artifactId>dubbo-api-docs-core</artifactId>
+    <artifactId>dubbo-api-docs-core</artifactId>
     <version>${dubbo-version}</version>
 </dependency>
 ```
-2.下载 dubbo-doc-ui-server [下载地址](https://github.com/KeRan213539/dubboDoc/releases)
-
-[国内用户可到码云下载](https://gitee.com/213539/dubboDoc/releases)
+2.下载 dubbo-api-docs-ui-server [下载地址](https://github.com/apache/dubbo-spi-extensions/releases)
 
-3. 启动 dubbo-doc-ui-server
+3. 启动 dubbo-api-docs-ui-server
 
 4. 访问: http:// localhost:8888
    * application.yml 中可以修改端口
-   * swagger-ui http:// localhost:8888/swagger-ui.html
+   * swagger-ui http:// localhost:8888/swagger-ui/
 ### 注解使用
-* @DubboApiModule 类注解: dubbo接口模块信息,用于标注一个接口类模块的用途
+* @ApiModule 类注解: dubbo接口模块信息,用于标注一个接口类模块的用途
     * value: 模块名称
     * apiInterface: 提供者实现的接口
     * version: 模块版本
-* @DubboApi 方法注解: dubbo 接口信息,用于标注一个接口的用途
+* @ApiDoc 方法注解: dubbo 接口信息,用于标注一个接口的用途
     * value: 接口名称
     * description: 接口描述(可使用html标签)
     * version: 接口版本
@@ -86,11 +72,10 @@ dubbo 接口文档、测试工具,根据注解生成文档,并提供测试功能
 * @ResponseProperty 类属性注解: 标注响应参数
     * value: 参数名
     * example: 示例
-### dubbo-doc-ui
+### dubbo-api-docs-ui
 * 获取接口列表直连: 由于可能不同功能的dubbo服务都会注册到同一个注册中心,但是dubbo doc
 使用的接口名是一样的,所以dubbo doc的接口采用直连方式以获取到不同功能服务的不同接口列表
 * 测试可以直连或者走注册中心
-### swagger-ui TODO
 
 ### 使用注意
 * 响应bean(接口的返回类型)支持自定义泛型, 但只支持一个泛型占位符
@@ -99,11 +84,11 @@ dubbo 接口文档、测试工具,根据注解生成文档,并提供测试功能
 * 接口的同步/异步取自 org.apache.dubbo.config.annotation.Service.async
 
 ## 项目结构
-* dubbo-doc-annotations: 文档生成辅助注解项目
-* dubbo-doc-core: 负责注解解析,文档信息获取接口(dubbo接口)
-* dubbo-doc-ui-server: web服务,负责展示doc,并提供测试功能
-* dubbo-doc-console: 前端项目, 发布时会打包到 dubbo-doc-ui-server 项目中
-* dubbo-doc-examples: 使用示例
+* dubbo-api-docs-annotations: 文档生成辅助注解项目
+* dubbo-api-docs-core: 负责注解解析,文档信息获取接口(dubbo接口)
+* dubbo-api-docs-ui-server: web服务,负责展示doc,并提供测试功能
+* dubbo-api-docs-ui: 前端项目, 发布时会打包到 dubbo-doc-ui-server 项目中
+* dubbo-api-docs-examples: 使用示例
 * readmeImgs: README.md 用到的图片
 
 ## 主要依赖版本
@@ -111,20 +96,4 @@ dubbo 接口文档、测试工具,根据注解生成文档,并提供测试功能
 * dubbo: apache dubbo 2.7.8
 * 前端使用飞冰(iceworks 4.0)
 
-## Dubbo Doc 做了什么?
-### 注解
-* 定义一些注解用于描述接口和参数的注解
-### 在需要生成文档和测试的 dubbo 项目中
-* 解析注解并缓存
-* 增加dubbo doc使用的获取接口信息的 dubbo 接口
-###  dubbo-doc-ui-server
-* web服务
-* 前端ui使用的获取接口信息的 web 接口(接口列表, 指定接口的信息)
-* 请求 dubbo 服务的web接口(使用 dubbo 泛化调用的方式)
-* 保存测试,并可在下次展现(第二版实现)
-### dubbo-doc-console(发布时打包到 dubbo-doc-ui-server 中)
-* 根据指定的dubbo服务IP和端口获取接口列表并展示(直连dubbo服务)
-* 根据指定的接口获取接口信息并生成带doc的表单(类似swagger)
-* 展示接口请求的响应
-
-![界面](https://github.com/KeRan213539/dubboDoc/blob/develop/readmeImgs/DubboDoc.png)
\ No newline at end of file
+![界面](./readmeImgs/DubboDoc.png)
\ No newline at end of file
diff --git a/dubbo-api-docs/distribution/bin/shutdown.cmd b/dubbo-api-docs/distribution/bin/shutdown.cmd
index 60fb33f..9eb749d 100644
--- a/dubbo-api-docs/distribution/bin/shutdown.cmd
+++ b/dubbo-api-docs/distribution/bin/shutdown.cmd
@@ -21,6 +21,6 @@ set "PATH=%JAVA_HOME%\bin;%PATH%"
 
 echo killing dubbo Doc server
 
-for /f "tokens=1" %%i in ('jps -m ^| find "dubbo.doc"') do ( taskkill /F /PID %%i )
+for /f "tokens=1" %%i in ('jps -m ^| find "dubbo.api.docs"') do ( taskkill /F /PID %%i )
 
 echo Done!
diff --git a/dubbo-api-docs/distribution/bin/startup.cmd b/dubbo-api-docs/distribution/bin/startup.cmd
index 6f91812..d748ab2 100644
--- a/dubbo-api-docs/distribution/bin/startup.cmd
+++ b/dubbo-api-docs/distribution/bin/startup.cmd
@@ -28,4 +28,4 @@ set "JAVA_OPT=%JAVA_OPT% -Xms512m -Xmx512m -Xmn256m"
 
 set "JAVA_OPT=%JAVA_OPT% -jar %BASE_DIR%\lib\%SERVER%.jar"
 
-call "%JAVA%" %JAVA_OPT% dubbo.doc %*
+call "%JAVA%" %JAVA_OPT% dubbo.api.docs %*
diff --git a/dubbo-api-docs/distribution/bin/startup.sh b/dubbo-api-docs/distribution/bin/startup.sh
index 039757e..c3fd3aa 100644
--- a/dubbo-api-docs/distribution/bin/startup.sh
+++ b/dubbo-api-docs/distribution/bin/startup.sh
@@ -47,11 +47,11 @@ if [ -z "$JAVA_HOME" ]; then
         error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better!"
   fi
 fi
-export SERVER="dubbo-doc-ui-server"
+export SERVER="dubbo-api-docs-ui-server"
 export JAVA_HOME
 export JAVA="$JAVA_HOME/bin/java"
 export BASE_DIR=`cd $(dirname $0)/..; pwd`
 JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m"
 JAVA_OPT="${JAVA_OPT} -jar ${BASE_DIR}/lib/${SERVER}.jar"
-nohup $JAVA ${JAVA_OPT} dubbo.doc >> ${BASE_DIR}/logs/catlog.out 2>&1 &
+nohup $JAVA ${JAVA_OPT} dubbo.api.docs >> ${BASE_DIR}/logs/catlog.out 2>&1 &
 echo "${SERVER} is starting,you can check the ${BASE_DIR}/logs/catlog.out"
\ No newline at end of file
diff --git a/dubbo-api-docs/distribution/pom.xml b/dubbo-api-docs/distribution/pom.xml
index 5bf2aa5..72a573c 100644
--- a/dubbo-api-docs/distribution/pom.xml
+++ b/dubbo-api-docs/distribution/pom.xml
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.apache.dubbo</groupId>
         <artifactId>dubbo-api-docs</artifactId>
-        <version>2.7.9-SNAPSHOT</version>
+        <version>${revision}</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
@@ -40,7 +40,7 @@
     </dependencies>
     <profiles>
         <profile>
-            <id>release-dubboDoc</id>
+            <id>release-dubboApiDocs</id>
             <dependencies>
                 <dependency>
                     <groupId>org.apache.dubbo</groupId>
diff --git a/dubbo-api-docs/dubbo-api-docs-annotations/pom.xml b/dubbo-api-docs/dubbo-api-docs-annotations/pom.xml
index 3437ad5..45b8615 100644
--- a/dubbo-api-docs/dubbo-api-docs-annotations/pom.xml
+++ b/dubbo-api-docs/dubbo-api-docs-annotations/pom.xml
@@ -21,7 +21,7 @@
     <parent>
         <groupId>org.apache.dubbo</groupId>
         <artifactId>dubbo-api-docs</artifactId>
-        <version>2.7.9-SNAPSHOT</version>
+        <version>${revision}</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
diff --git a/dubbo-api-docs/dubbo-api-docs-core/pom.xml b/dubbo-api-docs/dubbo-api-docs-core/pom.xml
index c251cd2..ff4fcde 100644
--- a/dubbo-api-docs/dubbo-api-docs-core/pom.xml
+++ b/dubbo-api-docs/dubbo-api-docs-core/pom.xml
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.apache.dubbo</groupId>
         <artifactId>dubbo-api-docs</artifactId>
-        <version>2.7.9-SNAPSHOT</version>
+        <version>${revision}</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
diff --git a/dubbo-api-docs/dubbo-api-docs-examples/examples-api/pom.xml b/dubbo-api-docs/dubbo-api-docs-examples/examples-api/pom.xml
index 252a1df..961cb5c 100644
--- a/dubbo-api-docs/dubbo-api-docs-examples/examples-api/pom.xml
+++ b/dubbo-api-docs/dubbo-api-docs-examples/examples-api/pom.xml
@@ -21,7 +21,7 @@
     <parent>
         <groupId>org.apache.dubbo.examples.apidocs</groupId>
         <artifactId>dubbo-api-docs-examples</artifactId>
-        <version>2.7.9-SNAPSHOT</version>
+        <version>${revision}</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
diff --git a/dubbo-api-docs/dubbo-api-docs-examples/examples-provider-sca/pom.xml b/dubbo-api-docs/dubbo-api-docs-examples/examples-provider-sca/pom.xml
index 00d09d5..6cd0781 100644
--- a/dubbo-api-docs/dubbo-api-docs-examples/examples-provider-sca/pom.xml
+++ b/dubbo-api-docs/dubbo-api-docs-examples/examples-provider-sca/pom.xml
@@ -21,7 +21,7 @@
     <parent>
         <groupId>org.apache.dubbo.examples.apidocs</groupId>
         <artifactId>dubbo-api-docs-examples</artifactId>
-        <version>2.7.9-SNAPSHOT</version>
+        <version>${revision}</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
diff --git a/dubbo-api-docs/dubbo-api-docs-examples/examples-provider/pom.xml b/dubbo-api-docs/dubbo-api-docs-examples/examples-provider/pom.xml
index acc63d4..c3bd6c5 100644
--- a/dubbo-api-docs/dubbo-api-docs-examples/examples-provider/pom.xml
+++ b/dubbo-api-docs/dubbo-api-docs-examples/examples-provider/pom.xml
@@ -21,7 +21,7 @@
     <parent>
         <groupId>org.apache.dubbo.examples.apidocs</groupId>
         <artifactId>dubbo-api-docs-examples</artifactId>
-        <version>2.7.9-SNAPSHOT</version>
+        <version>${revision}</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
diff --git a/dubbo-api-docs/dubbo-api-docs-examples/pom.xml b/dubbo-api-docs/dubbo-api-docs-examples/pom.xml
index bf7686b..61862fe 100644
--- a/dubbo-api-docs/dubbo-api-docs-examples/pom.xml
+++ b/dubbo-api-docs/dubbo-api-docs-examples/pom.xml
@@ -21,7 +21,7 @@
     <parent>
         <groupId>org.apache.dubbo</groupId>
         <artifactId>dubbo-api-docs</artifactId>
-        <version>2.7.9-SNAPSHOT</version>
+        <version>${revision}</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
diff --git a/dubbo-api-docs/dubbo-api-docs-ui-server/pom.xml b/dubbo-api-docs/dubbo-api-docs-ui-server/pom.xml
index 9044a7d..7698683 100644
--- a/dubbo-api-docs/dubbo-api-docs-ui-server/pom.xml
+++ b/dubbo-api-docs/dubbo-api-docs-ui-server/pom.xml
@@ -17,29 +17,28 @@
  -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
-    <groupId>org.apache.dubbo</groupId>
+
+    <parent>
+        <groupId>org.apache.dubbo</groupId>
+        <artifactId>dubbo-api-docs</artifactId>
+        <version>${revision}</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
     <artifactId>dubbo-api-docs-ui-server</artifactId>
-    <version>2.7.9-SNAPSHOT</version>
     <packaging>jar</packaging>
     <name>dubbo-api-docs-ui-server</name>
     <description>Web ui, responsible for displaying doc and providing testing function</description>
 
-    <parent>
-        <groupId>org.springframework.boot</groupId>
-        <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.3.4.RELEASE</version>
-        <relativePath />
-    </parent>
-
     <properties>
     </properties>
-    
+
     <dependencyManagement>
         <dependencies>
             <dependency>
-                <groupId>org.apache.dubbo</groupId>
-                <artifactId>dubbo-api-docs</artifactId>
-                <version>2.7.9-SNAPSHOT</version>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-starter-parent</artifactId>
+                <version>${spring-boot.version}</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
@@ -219,11 +218,6 @@
         </dependency>
 
         <dependency>
-            <groupId>org.projectlombok</groupId>
-            <artifactId>lombok</artifactId>
-        </dependency>
-
-        <dependency>
             <groupId>commons-io</groupId>
             <artifactId>commons-io</artifactId>
         </dependency>
@@ -242,9 +236,9 @@
 
     <profiles>
         <profile>
-            <id>release-dubboDoc</id>
+            <id>release-dubboApiDocs</id>
             <build>
-                <finalName>dubbo-doc-ui-server</finalName>
+                <finalName>dubbo-api-docs-ui-server</finalName>
                 <plugins>
                     <plugin>
                         <artifactId>maven-jar-plugin</artifactId>
diff --git a/dubbo-api-docs/dubbo-api-docs-ui-server/src/main/resources/application.yml b/dubbo-api-docs/dubbo-api-docs-ui-server/src/main/resources/application.yml
index a482c54..76231ff 100644
--- a/dubbo-api-docs/dubbo-api-docs-ui-server/src/main/resources/application.yml
+++ b/dubbo-api-docs/dubbo-api-docs-ui-server/src/main/resources/application.yml
@@ -2,7 +2,7 @@ server:
   port: 8888
 spring:
   application:
-    name: dubbo-doc-ui-server
+    name: dubbo-api-docs-ui-server
 dubbo:
   reference:
     heartbeat: 1000
diff --git a/dubbo-api-docs/dubbo-api-docs-ui-server/src/main/resources/banner.txt b/dubbo-api-docs/dubbo-api-docs-ui-server/src/main/resources/banner.txt
index ca3cb3e..86690cb 100644
--- a/dubbo-api-docs/dubbo-api-docs-ui-server/src/main/resources/banner.txt
+++ b/dubbo-api-docs/dubbo-api-docs-ui-server/src/main/resources/banner.txt
@@ -1,6 +1,7 @@
-  _____        _     _                         _____ _____    _____
- |  __ \      | |   | |                  /\   |  __ \_   _|  |  __ \
- | |  | |_   _| |__ | |__    ___       /  \  | |__) || |    | |  | | ___   ___ ___
- | |  | | | | | '_ \| '_ \ / _  \     / /\ \ |  ___/ | |    | |  | |/ _ \ / __/ __|
- | |__| | |_| | |_) | |_) | (_) |   / ____ \| |    _| |_   | |__| | (_) | (__\__ \
- |_____/ \__,_|_.__/|_.__/ \___/  /_/    \_\_|   |_____|  |_____/ \___/ \___|___/
+  _____        _     _                        _____ _____      _____
+ |  __ \      | |   | |                 /\   |  __ \_   _|    |  __ \
+ | |  | |_   _| |__ | |__   ___        /  \  | |__) || |      | |  | | ___   ___ ___
+ | |  | | | | | '_ \| '_ \ / _ \      / /\ \ |  ___/ | |      | |  | |/ _ \ / __/ __|
+ | |__| | |_| | |_) | |_) | (_) |    / ____ \| |    _| |_     | |__| | (_) | (__\__ \
+ |_____/ \__,_|_.__/|_.__/ \___/    /_/    \_\_|   |_____|    |_____/ \___/ \___|___/
+
diff --git a/dubbo-api-docs/dubbo-api-docs-ui-server/src/main/resources/log4j2.xml b/dubbo-api-docs/dubbo-api-docs-ui-server/src/main/resources/log4j2.xml
index 929bc5e..8bd3515 100644
--- a/dubbo-api-docs/dubbo-api-docs-ui-server/src/main/resources/log4j2.xml
+++ b/dubbo-api-docs/dubbo-api-docs-ui-server/src/main/resources/log4j2.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Configuration status="WARN" monitorInterval="600" shutdownHook="disable">
     <Properties>
-        <Property name="logDir" value="/home/weihu/deploy/logs/dubbo-doc/" />
+        <Property name="logDir" value="/home/weihu/deploy/logs/dubbo-api-docs/" />
         <Property name="genericPattern" value="[dubboDoc]-%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
         <Property name="genericFilePattern" value="%d{yyyy-MM-dd HH:mm}-%i" />
     </Properties>
diff --git a/dubbo-api-docs/dubbo-api-docs-ui-server/src/main/resources/static/css/index.css b/dubbo-api-docs/dubbo-api-docs-ui-server/src/main/resources/static/css/index.css
index 98a1ac6..6642125 100644
--- a/dubbo-api-docs/dubbo-api-docs-ui-server/src/main/resources/static/css/index.css
+++ b/dubbo-api-docs/dubbo-api-docs-ui-server/src/main/resources/static/css/index.css
@@ -1 +1 @@
-.next-sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;margin:-1px}/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;box-si [...]
\ No newline at end of file
+.next-sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;margin:-1px}/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;box-si [...]
\ No newline at end of file
diff --git a/dubbo-api-docs/dubbo-api-docs-ui-server/src/main/resources/static/js/index.js b/dubbo-api-docs/dubbo-api-docs-ui-server/src/main/resources/static/js/index.js
index 948c8b0..a7ab576 100644
--- a/dubbo-api-docs/dubbo-api-docs-ui-server/src/main/resources/static/js/index.js
+++ b/dubbo-api-docs/dubbo-api-docs-ui-server/src/main/resources/static/js/index.js
@@ -1,26 +1,26 @@
-!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typ [...]
+!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typ [...]
 /*!
   Copyright (c) 2017 Jed Watson.
   Licensed under the MIT License (MIT), see
   http://jedwatson.github.io/classnames
-*/!function(){"use strict";var n={}.hasOwnProperty;function a(){for(var e=[],t=0;t<arguments.length;t++){var r=arguments[t];if(r){var o=typeof r;if("string"===o||"number"===o)e.push(r);else if(Array.isArray(r)&&r.length){var i=a.apply(null,r);i&&e.push(i)}else if("object"===o)for(var s in r)n.call(r,s)&&r[s]&&e.push(s)}}return e.join(" ")}e.exports?(a.default=a,e.exports=a):void 0===(o=function(){return a}.apply(t,r=[]))||(e.exports=o)}()},function(e,t,n){"use strict";t.__esModule=!0;var [...]
+*/!function(){"use strict";var n={}.hasOwnProperty;function a(){for(var e=[],t=0;t<arguments.length;t++){var r=arguments[t];if(r){var o=typeof r;if("string"===o||"number"===o)e.push(r);else if(Array.isArray(r)&&r.length){var i=a.apply(null,r);i&&e.push(i)}else if("object"===o)for(var s in r)n.call(r,s)&&r[s]&&e.push(s)}}return e.join(" ")}e.exports?(a.default=a,e.exports=a):void 0===(o=function(){return a}.apply(t,r=[]))||(e.exports=o)}()},function(e,t,n){"use strict";t.__esModule=!0;var [...]
 /*! *****************************************************************************
-Copyright (c) Microsoft Corporation. All rights reserved.
-Licensed 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
+Copyright (c) Microsoft Corporation.
 
-THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
-WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
-MERCHANTABLITY OR NON-INFRINGEMENT.
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
 
-See the Apache Version 2.0 License for specific language governing permissions
-and limitations under the License.
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
 ***************************************************************************** */
-var r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function o(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var a=function(){return(a=Object.assign||function e(t){for(var n,r=1,o=arguments.length;r<o;r++)for(var a in n=arguments[r])Object.prototype.hasOwnProperty.call(n,a)&&(t[a]=n[a]);retu [...]
+var r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function o(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var a=function(){return(a=Object.assign||function e(t){for(var n,r=1,o=arguments.length;r<o;r++)for(var a in n=arguments[r])Object.prototype.hasOwnProperty.call(n,a)&&(t[a]=n[a]);retu [...]
 /*!
- * jQuery JavaScript Library v3.4.1
+ * jQuery JavaScript Library v3.5.1
  * https://jquery.com/
  *
  * Includes Sizzle.js
@@ -30,66 +30,83 @@ var r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Arr
  * Released under the MIT license
  * https://jquery.org/license
  *
- * Date: 2019-05-01T21:04Z
- */!function(t,n){"use strict";"object"==typeof e.exports?e.exports=t.document?n(t,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return n(e)}:n(t)}("undefined"!=typeof window?window:this,(function(n,a){"use strict";var i=[],s=n.document,l=Object.getPrototypeOf,u=i.slice,c=i.concat,f=i.push,p=i.indexOf,d={},h=d.toString,v=d.hasOwnProperty,m=v.toString,y=m.call(Object),g={},b=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType} [...]
+ * Date: 2020-05-04T22:49Z
+ */!function(t,n){"use strict";"object"==typeof e.exports?e.exports=t.document?n(t,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return n(e)}:n(t)}("undefined"!=typeof window?window:this,(function(n,a){"use strict";var i=[],s=Object.getPrototypeOf,u=i.slice,l=i.flat?function(e){return i.flat.call(e)}:function(e){return i.concat.apply([],e)},c=i.push,f=i.indexOf,p={},d=p.toString,h=p.hasOwnProperty,v=h.toString,m=v.call(Object),y={},g=function  [...]
 /*!
- * Sizzle CSS Selector Engine v2.3.4
+ * Sizzle CSS Selector Engine v2.3.5
  * https://sizzlejs.com/
  *
  * Copyright JS Foundation and other contributors
  * Released under the MIT license
  * https://js.foundation/
  *
- * Date: 2019-04-08
+ * Date: 2020-03-14
  */
-function(e){var t,n,r,o,a,i,s,l,u,c,f,p,d,h,v,m,y,g,b,w="sizzle"+1*new Date,x=e.document,E=0,_=0,C=le(),S=le(),k=le(),O=le(),T=function(e,t){return e===t&&(f=!0),0},P={}.hasOwnProperty,j=[],A=j.pop,N=j.push,M=j.push,D=j.slice,L=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",I="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",z=" [...]
+function(e){var t,n,r,o,a,i,s,u,l,c,f,p,d,h,v,m,y,g,b,w="sizzle"+1*new Date,x=e.document,E=0,_=0,O=ue(),S=ue(),C=ue(),k=ue(),P=function(e,t){return e===t&&(f=!0),0},T={}.hasOwnProperty,j=[],A=j.pop,N=j.push,M=j.push,D=j.slice,R=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",I="[\\x20\\t\\r\\n\\f]",F="(?:\\\\[\\da-fA-F]{1,6}"+I+"?|\\\\ [...]
+/*
+object-assign
+(c) Sindre Sorhus
+@license MIT
+*/var r=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable;function i(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}function s(){try{if(!Object.assign)return!1;var e=new String("abc"),t;if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var n={},r=0;r<10;r++)n["_"+String.fromCharCode(r)]=r;if("0123456789"!==Object.getOwnPropertyNames(n).map((function(e){return n [...]
 /*!
  * cookie
  * Copyright(c) 2012-2014 Roman Shtylman
  * Copyright(c) 2015 Douglas Christopher Wilson
  * MIT Licensed
- */t.parse=s,t.serialize=l;var r=decodeURIComponent,o=encodeURIComponent,a=/; */,i=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/;function s(e,t){if("string"!=typeof e)throw new TypeError("argument str must be a string");for(var n={},o=t||{},i=e.split(a),s=o.decode||r,l=0;l<i.length;l++){var c=i[l],f=c.indexOf("=");if(!(f<0)){var p=c.substr(0,f).trim(),d=c.substr(++f,c.length).trim();'"'==d[0]&&(d=d.slice(1,-1)),null==n[p]&&(n[p]=u(d,s))}}return n}function l(e,t,n){var r=n||{},a=r.encode||o;if( [...]
-/*
-object-assign
-(c) Sindre Sorhus
-@license MIT
-*/var r=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable;function i(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}function s(){try{if(!Object.assign)return!1;var e=new String("abc"),t;if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var n={},r=0;r<10;r++)n["_"+String.fromCharCode(r)]=r;if("0123456789"!==Object.getOwnPropertyNames(n).map((function(e){return n [...]
-/** @license React v16.13.0
+ */t.parse=s,t.serialize=u;var r=decodeURIComponent,o=encodeURIComponent,a=/; */,i=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/;function s(e,t){if("string"!=typeof e)throw new TypeError("argument str must be a string");for(var n={},o=t||{},i=e.split(a),s=o.decode||r,u=0;u<i.length;u++){var c=i[u],f=c.indexOf("=");if(!(f<0)){var p=c.substr(0,f).trim(),d=c.substr(++f,c.length).trim();'"'==d[0]&&(d=d.slice(1,-1)),null==n[p]&&(n[p]=l(d,s))}}return n}function u(e,t,n){var r=n||{},a=r.encode||o;if( [...]
+//! version : 2.29.1
+//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
+//! license : MIT
+//! momentjs.com
+r=this,o=function(){"use strict";var t,r;function o(){return t.apply(null,arguments)}function a(e){t=e}function i(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function s(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function u(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function l(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(u(e,t))return!1;return!0}function  [...]
+//! moment.js
+o.version="2.29.1",a($n),o.fn=la,o.min=Qn,o.max=er,o.now=tr,o.utc=v,o.unix=ca,o.months=ya,o.isDate=p,o.locale=vn,o.invalid=b,o.duration=Pr,o.isMoment=O,o.weekdays=ba,o.parseZone=fa,o.localeData=gn,o.isDuration=sr,o.monthsShort=ga,o.weekdaysMin=xa,o.defineLocale=mn,o.updateLocale=yn,o.locales=bn,o.weekdaysShort=wa,o.normalizeUnits=oe,o.relativeTimeRounding=oi,o.relativeTimeThreshold=ai,o.calendarFormat=Ur,o.prototype=la,o.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS [...]
+//! moment.js locale configuration
+var t;return e.defineLocale("zh-cn",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d" [...]
+/** @license React v16.14.0
  * react.production.min.js
  *
  * Copyright (c) Facebook, Inc. and its affiliates.
  *
  * This source code is licensed under the MIT license found in the
  * LICENSE file in the root directory of this source tree.
- */var r=n(247),o="function"==typeof Symbol&&Symbol.for,a=o?Symbol.for("react.element"):60103,i=o?Symbol.for("react.portal"):60106,s=o?Symbol.for("react.fragment"):60107,l=o?Symbol.for("react.strict_mode"):60108,u=o?Symbol.for("react.profiler"):60114,c=o?Symbol.for("react.provider"):60109,f=o?Symbol.for("react.context"):60110,p=o?Symbol.for("react.forward_ref"):60112,d=o?Symbol.for("react.suspense"):60113,h=o?Symbol.for("react.memo"):60115,v=o?Symbol.for("react.lazy"):60116,m="function"= [...]
-/** @license React v16.13.0
+ */var r=n(189),o="function"==typeof Symbol&&Symbol.for,a=o?Symbol.for("react.element"):60103,i=o?Symbol.for("react.portal"):60106,s=o?Symbol.for("react.fragment"):60107,u=o?Symbol.for("react.strict_mode"):60108,l=o?Symbol.for("react.profiler"):60114,c=o?Symbol.for("react.provider"):60109,f=o?Symbol.for("react.context"):60110,p=o?Symbol.for("react.forward_ref"):60112,d=o?Symbol.for("react.suspense"):60113,h=o?Symbol.for("react.memo"):60115,v=o?Symbol.for("react.lazy"):60116,m="function"= [...]
+/** @license React v16.14.0
  * react-dom.production.min.js
  *
  * Copyright (c) Facebook, Inc. and its affiliates.
  *
  * This source code is licensed under the MIT license found in the
  * LICENSE file in the root directory of this source tree.
- */var r=n(1),o=n(247),a=n(525);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!r)throw Error(i(227));function s(e,t,n,r,o,a,i,s,l){var u=Array.prototype.slice.call(arguments,3);try{t.apply(n,u)}catch(e){this.onError(e)} [...]
-/** @license React v0.19.0
+ */var r=n(1),o=n(189),a=n(562);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!r)throw Error(i(227));function s(e,t,n,r,o,a,i,s,u){var l=Array.prototype.slice.call(arguments,3);try{t.apply(n,l)}catch(e){this.onError(e)} [...]
+/** @license React v0.19.1
  * scheduler.production.min.js
  *
  * Copyright (c) Facebook, Inc. and its affiliates.
  *
  * This source code is licensed under the MIT license found in the
  * LICENSE file in the root directory of this source tree.
- */var r,o,a,i,s;if("undefined"==typeof window||"function"!=typeof MessageChannel){var l=null,u=null,c=function(){if(null!==l)try{var e=t.unstable_now();l(!0,e),l=null}catch(e){throw setTimeout(c,0),e}},f=Date.now();t.unstable_now=function(){return Date.now()-f},r=function(e){null!==l?setTimeout(r,0,e):(l=e,setTimeout(c,0))},o=function(e,t){u=setTimeout(e,t)},a=function(){clearTimeout(u)},i=function(){return!1},s=t.unstable_forceFrameRate=function(){}}else{var p=window.performance,d=wind [...]
+ */var r,o,a,i,s;if("undefined"==typeof window||"function"!=typeof MessageChannel){var u=null,l=null,c=function(){if(null!==u)try{var e=t.unstable_now();u(!0,e),u=null}catch(e){throw setTimeout(c,0),e}},f=Date.now();t.unstable_now=function(){return Date.now()-f},r=function(e){null!==u?setTimeout(r,0,e):(u=e,setTimeout(c,0))},o=function(e,t){l=setTimeout(e,t)},a=function(){clearTimeout(l)},i=function(){return!1},s=t.unstable_forceFrameRate=function(){}}else{var p=window.performance,d=wind [...]
+/** @license React v16.14.0
+ * react-dom-server.browser.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */var r=n(189),o=n(1);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var i="function"==typeof Symbol&&Symbol.for,s=i?Symbol.for("react.portal"):60106,u=i?Symbol.for("react.fragment"):60107,l=i?Symbol.for("react.strict_mode [...]
 /*!
  * escape-html
  * Copyright(c) 2012-2013 TJ Holowaychuk
  * Copyright(c) 2015 Andreas Lubbe
  * Copyright(c) 2015 Tiancheng "Timothy" Gu
  * MIT Licensed
- */var r=/["'&<>]/;function o(e){var t=""+e,n=r.exec(t),o;if(!n)return t;var a="",i=0,s=0;for(i=n.index;i<t.length;i++){switch(t.charCodeAt(i)){case 34:o="&quot;";break;case 38:o="&amp;";break;case 39:o="&#39;";break;case 60:o="&lt;";break;case 62:o="&gt;";break;default:continue}s!==i&&(a+=t.substring(s,i)),s=i+1,a+=o}return s!==i?a+t.substring(s,i):a}e.exports=o},function(e,t,n){"use strict";t.decode=t.parse=n(561),t.encode=t.stringify=n(562)},function(e,t,n){"use strict";function r(e,t [...]
-/** @license React v16.13.0
+ */var r=/["'&<>]/;function o(e){var t=""+e,n=r.exec(t),o;if(!n)return t;var a="",i=0,s=0;for(i=n.index;i<t.length;i++){switch(t.charCodeAt(i)){case 34:o="&quot;";break;case 38:o="&amp;";break;case 39:o="&#39;";break;case 60:o="&lt;";break;case 62:o="&gt;";break;default:continue}s!==i&&(a+=t.substring(s,i)),s=i+1,a+=o}return s!==i?a+t.substring(s,i):a}e.exports=o},function(e,t,n){"use strict";t.decode=t.parse=n(597),t.encode=t.stringify=n(598)},function(e,t,n){"use strict";function r(e,t [...]
+/** @license React v16.13.1
  * react-is.production.min.js
  *
  * Copyright (c) Facebook, Inc. and its affiliates.
  *
  * This source code is licensed under the MIT license found in the
  * LICENSE file in the root directory of this source tree.
- */var r="function"==typeof Symbol&&Symbol.for,o=r?Symbol.for("react.element"):60103,a=r?Symbol.for("react.portal"):60106,i=r?Symbol.for("react.fragment"):60107,s=r?Symbol.for("react.strict_mode"):60108,l=r?Symbol.for("react.profiler"):60114,u=r?Symbol.for("react.provider"):60109,c=r?Symbol.for("react.context"):60110,f=r?Symbol.for("react.async_mode"):60111,p=r?Symbol.for("react.concurrent_mode"):60111,d=r?Symbol.for("react.forward_ref"):60112,h=r?Symbol.for("react.suspense"):60113,v=r?S [...]
\ No newline at end of file
+ */var r="function"==typeof Symbol&&Symbol.for,o=r?Symbol.for("react.element"):60103,a=r?Symbol.for("react.portal"):60106,i=r?Symbol.for("react.fragment"):60107,s=r?Symbol.for("react.strict_mode"):60108,u=r?Symbol.for("react.profiler"):60114,l=r?Symbol.for("react.provider"):60109,c=r?Symbol.for("react.context"):60110,f=r?Symbol.for("react.async_mode"):60111,p=r?Symbol.for("react.concurrent_mode"):60111,d=r?Symbol.for("react.forward_ref"):60112,h=r?Symbol.for("react.suspense"):60113,v=r?S [...]
\ No newline at end of file
diff --git a/dubbo-api-docs/pom.xml b/dubbo-api-docs/pom.xml
index 323ab37..9b81e6c 100644
--- a/dubbo-api-docs/pom.xml
+++ b/dubbo-api-docs/pom.xml
@@ -18,12 +18,13 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
-        <groupId>org.apache.dubbo</groupId>
-        <artifactId>dubbo-parent</artifactId>
-        <version>2.7.9-SNAPSHOT</version>
-        <relativePath />
+        <groupId>org.apache</groupId>
+        <artifactId>apache</artifactId>
+        <version>19</version>
     </parent>
+    <groupId>org.apache.dubbo</groupId>
     <artifactId>dubbo-api-docs</artifactId>
+    <version>${revision}</version>
     <packaging>pom</packaging>
     <name>${project.artifactId}</name>
     <description>Dubbo interface documentation, testing tools</description>
@@ -56,6 +57,13 @@
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
+            <dependency>
+                <groupId>org.apache.dubbo</groupId>
+                <artifactId>dubbo-parent</artifactId>
+                <version>${revision}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
 
             <!-- Internal libs -->
             <dependency>
diff --git a/dubbo-api-docs/readmeImgs/DubboDoc.png b/dubbo-api-docs/readmeImgs/DubboDoc.png
new file mode 100644
index 0000000..4a5ab40
Binary files /dev/null and b/dubbo-api-docs/readmeImgs/DubboDoc.png differ