文档章节

maven打包dubbo

流萤飘枫丶
 流萤飘枫丶
发布于 2017/02/04 10:10
字数 1829
阅读 51
收藏 0

之前刚开始学习dubbo的时候,曾写过一个入门的小例子,当时生产者也是用tomcat去跑的,其实dubbo只需要提供service层接口就好了,并不需要和http相关的东西,所以其实并不需要用tomcat去跑,我们完全打成其他的包直接去跑,这样dubbo接口也不会tomcat性能的限制,而打包可以说是maven最擅长的事情之一,今天就记录一下我们公司的实际项目中使用maven-assembly-plugin打包的方法。

1. 首先在pom文件中,添加maven-assembly-plugin插件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<plugin>

    <artifactId>maven-assembly-plugin</artifactId>

    <configuration>

        <descriptor>src/main/assembly/assembly.xml</descriptor>

    </configuration>

    <executions>

        <execution>

            <id>make-assembly</id>

            <phase>package</phase>

            <goals>

                <goal>single </goal>

            </goals>

        </execution>

    </executions>

</plugin>

在该插件的第四行我们指定了一个assembly.xml文件,下面我们就看看assembly.xml的内容

2. assembly.xml文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

<assembly>

    <id>assembly</id>

    <formats>

        <format>tar.gz</format>

    </formats>

    <includeBaseDirectory>true</includeBaseDirectory>

    <fileSets>

        <fileSet>

            <outputDirectory>/</outputDirectory>

            <includes>

                <include>README.txt</include>

            </includes>

        </fileSet>

        <fileSet>

            <directory>src/main/scripts</directory>

            <outputDirectory>/bin</outputDirectory>

        </fileSet>

    </fileSets>

    <dependencySets>

        <dependencySet>

            <useProjectArtifact>true</useProjectArtifact>

            <outputDirectory>lib</outputDirectory>

        </dependencySet>

    </dependencySets>

</assembly>

该文件的第四行中的tar.gz指的就是打包的文件格式,对于Linux用户,对这个格式一定非常熟悉,当然大家也可以指定为zip格式,另外在该文件的第十五行,指定了一个scripts文件夹,那么这里面放的又是什么呢?我们知道打包之后的系统我们要跑起来才能用,那么这里面放的就是对我们的系统操作的一些脚本,打包之后,我们的系统都是一些jar文件,放在了倒数第四行指定的lib文件中,而这些脚本则放在了和lib同级的bin文件中,下面就让我们一一看看scripts中几个文件的内容

3. scripts文件夹

①. start.bat

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

@echo off & setlocal enabledelayedexpansion

 

set LIB_JARS=""

cd ..lib

for %%i in (*) do set LIB_JARS=!LIB_JARS!;..lib%%i

cd ..bin

 

if ""%1"" == ""debug"" goto debug

if ""%1"" == ""jmx"" goto jmx

 

java -Xms64m -Xmx1024m -XX:MaxPermSize=64M -classpath ..conf;%LIB_JARS% com.alibaba.dubbo.container.Main

goto end

 

:debug

java -Xms64m -Xmx1024m -XX:MaxPermSize=64M -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n -classpath ..conf;%LIB_JARS% com.alibaba.dubbo.container.Main

goto end

 

:jmx

java -Xms64m -Xmx1024m -XX:MaxPermSize=64M -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -classpath ..conf;%LIB_JARS% com.alibaba.dubbo.container.Main

 

:end

pause

②. start.sh

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

#!/bin/bash

cd `dirname $0`

BIN_DIR=`pwd`

cd ..

DEPLOY_DIR=`pwd`

CONF_DIR=$DEPLOY_DIR/conf

 

USER=www

GROUP=www

 

#SERVER_NAME=`sed '/dubbo.application.name/!d;s/.*=//' conf/dubbo.properties | tr -d 'r'`

#SERVER_PROTOCOL=`sed '/dubbo.protocol.name/!d;s/.*=//' conf/dubbo.properties | tr -d 'r'`

#SERVER_PORT=`sed '/dubbo.protocol.port/!d;s/.*=//' conf/dubbo.properties | tr -d 'r'`

#LOGS_FILE=`sed '/dubbo.log4j.file/!d;s/.*=//' conf/dubbo.properties | tr -d 'r'`

SERVER_NAME=""

SERVER_PROTOCOL=""

SERVER_PORT=""

LOGS_FILE=""

 

if [ -z "$SERVER_NAME" ]; then

    SERVER_NAME=`hostname`

fi

 

PIDS=`ps -f | grep java | grep "$CONF_DIR" |awk '{print $2}'`

if [ -n "$PIDS" ]; then

    echo "ERROR: The $SERVER_NAME already started!"

    echo "PID: $PIDS"

    exit 1

fi

 

if [ -n "$SERVER_PORT" ]; then

    SERVER_PORT_COUNT=`netstat -tln | grep $SERVER_PORT | wc -l`

    if [ $SERVER_PORT_COUNT -gt 0 ]; then

        echo "ERROR: The $SERVER_NAME port $SERVER_PORT already used!"

        exit 1

    fi

fi

 

LOGS_DIR="/data/logs/`basename $DEPLOY_DIR`"

 

if [ ! -d $LOGS_DIR ]; then

    mkdir -p $LOGS_DIR

    chown -R $USER.$GROUP $LOGS_DIR

fi

STDOUT_FILE=$LOGS_DIR/`basename $DEPLOY_DIR`.log

 

LIB_DIR=$DEPLOY_DIR/lib

LIB_JARS=`ls $LIB_DIR|grep .jar|awk '{print "'$LIB_DIR'/"$0}'|tr "n" ":"`

 

JAVA_OPTS=" -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true "

JAVA_DEBUG_OPTS=""

if [ "$1" = "debug" ]; then

    JAVA_DEBUG_OPTS=" -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n "

fi

JAVA_JMX_OPTS=""

if [ "$1" = "jmx" ]; then

    JAVA_JMX_OPTS=" -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false "

fi

JAVA_MEM_OPTS=""

BITS=`java -version 2>&1 | grep -i 64-bit`

if [ -n "$BITS" ]; then

    JAVA_MEM_OPTS=" -server -Xmx2g -Xms2g -Xmn720m -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 "

else

    JAVA_MEM_OPTS=" -server -Xms2g -Xmx2g -XX:PermSize=128m -XX:SurvivorRatio=2 -XX:+UseParallelGC "

fi

 

echo -e "Starting the $SERVER_NAME ...c"

nohup java $JAVA_OPTS $JAVA_MEM_OPTS $JAVA_DEBUG_OPTS $JAVA_JMX_OPTS -classpath $CONF_DIR:$LIB_JARS com.alibaba.dubbo.container.Main > $STDOUT_FILE 2>&1 &

 

COUNT=0

while [ $COUNT -lt 1 ]; do   

    echo -e ".c"

    sleep 1

    if [ -n "$SERVER_PORT" ]; then

        if [ "$SERVER_PROTOCOL" == "dubbo" ]; then

            COUNT=`echo status | nc -i 1 127.0.0.1 $SERVER_PORT | grep -c OK`

        else

            COUNT=`netstat -an | grep $SERVER_PORT | wc -l`

        fi

    else

        COUNT=`ps -f | grep java | grep "$DEPLOY_DIR" | awk '{print $2}' | wc -l`

    fi

    if [ $COUNT -gt 0 ]; then

        break

    fi

done

 

echo "OK!"

PIDS=`ps -f | grep java | grep "$DEPLOY_DIR" | awk '{print $2}'`

echo "PID: $PIDS"

echo "STDOUT: $STDOUT_FILE"

③. stop.sh

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

#!/bin/bash

cd `dirname $0`

BIN_DIR=`pwd`

cd ..

DEPLOY_DIR=`pwd`

CONF_DIR=$DEPLOY_DIR/conf

 

SERVER_NAME=`sed '/dubbo.application.name/!d;s/.*=//' conf/dubbo.properties | tr -d 'r'`

 

if [ -z "$SERVER_NAME" ]; then

    SERVER_NAME=`hostname`

fi

 

PIDS=`ps -f | grep java | grep "$CONF_DIR" |awk '{print $2}'`

if [ -z "$PIDS" ]; then

    echo "ERROR: The $SERVER_NAME does not started!"

    exit 1

fi

 

if [ "$1" != "skip" ]; then

    $BIN_DIR/dump.sh

fi

 

echo -e "Stopping the $SERVER_NAME ...c"

for PID in $PIDS ; do

    kill $PID > /dev/null 2>&1

done

 

COUNT=0

while [ $COUNT -lt 1 ]; do   

    echo -e ".c"

    sleep 1

    COUNT=1

    for PID in $PIDS ; do

        PID_EXIST=`ps -f -p $PID | grep java`

        if [ -n "$PID_EXIST" ]; then

            COUNT=0

            break

        fi

    done

done

 

echo "OK!"

echo "PID: $PIDS"

④. restart.sh

1

2

3

4

#!/bin/bash

cd `dirname $0`

./stop.sh

./start.sh

⑤. server.sh

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

#!/bin/bash

cd `dirname $0`

if [ "$1" = "start" ]; then

    ./start.sh

else

    if [ "$1" = "stop" ]; then

        ./stop.sh

    else

        if [ "$1" = "debug" ]; then

            ./start.sh debug

        else

            if [ "$1" = "restart" ]; then

                ./restart.sh

            else

                if [ "$1" = "dump" ]; then

                    ./dump.sh

                else

                    echo "ERROR: Please input argument: start or stop or debug or restart or dump"

                    exit 1

                fi

            fi

        fi

    fi

fi

⑥. dump.sh

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

#!/bin/bash

cd `dirname $0`

BIN_DIR=`pwd`

cd ..

DEPLOY_DIR=`pwd`

CONF_DIR=$DEPLOY_DIR/conf

 

SERVER_NAME=`sed '/dubbo.application.name/!d;s/.*=//' conf/dubbo.properties | tr -d 'r'`

LOGS_FILE=`sed '/dubbo.log4j.file/!d;s/.*=//' conf/dubbo.properties | tr -d 'r'`

 

if [ -z "$SERVER_NAME" ]; then

    SERVER_NAME=`hostname`

fi

 

PIDS=`ps -f | grep java | grep "$CONF_DIR" |awk '{print $2}'`

if [ -z "$PIDS" ]; then

    echo "ERROR: The $SERVER_NAME does not started!"

    exit 1

fi

 

LOGS_DIR=""

if [ -n "$LOGS_FILE" ]; then

    LOGS_DIR=`dirname $LOGS_FILE`

else

    LOGS_DIR=$DEPLOY_DIR/logs

fi

if [ ! -d $LOGS_DIR ]; then

    mkdir $LOGS_DIR

fi

DUMP_DIR=$LOGS_DIR/dump

if [ ! -d $DUMP_DIR ]; then

    mkdir $DUMP_DIR

fi

DUMP_DATE=`date +%Y%m%d%H%M%S`

DATE_DIR=$DUMP_DIR/$DUMP_DATE

if [ ! -d $DATE_DIR ]; then

    mkdir $DATE_DIR

fi

 

echo -e "Dumping the $SERVER_NAME ...c"

for PID in $PIDS ; do

    jstack $PID > $DATE_DIR/jstack-$PID.dump 2>&1

    echo -e ".c"

    jinfo $PID > $DATE_DIR/jinfo-$PID.dump 2>&1

    echo -e ".c"

    jstat -gcutil $PID > $DATE_DIR/jstat-gcutil-$PID.dump 2>&1

    echo -e ".c"

    jstat -gccapacity $PID > $DATE_DIR/jstat-gccapacity-$PID.dump 2>&1

    echo -e ".c"

    jmap $PID > $DATE_DIR/jmap-$PID.dump 2>&1

    echo -e ".c"

    jmap -heap $PID > $DATE_DIR/jmap-heap-$PID.dump 2>&1

    echo -e ".c"

    jmap -histo $PID > $DATE_DIR/jmap-histo-$PID.dump 2>&1

    echo -e ".c"

    if [ -r /usr/sbin/lsof ]; then

    /usr/sbin/lsof -p $PID > $DATE_DIR/lsof-$PID.dump

    echo -e ".c"

    fi

done

 

if [ -r /bin/netstat ]; then

/bin/netstat -an > $DATE_DIR/netstat.dump 2>&1

echo -e ".c"

fi

if [ -r /usr/bin/iostat ]; then

/usr/bin/iostat > $DATE_DIR/iostat.dump 2>&1

echo -e ".c"

fi

if [ -r /usr/bin/mpstat ]; then

/usr/bin/mpstat > $DATE_DIR/mpstat.dump 2>&1

echo -e ".c"

fi

if [ -r /usr/bin/vmstat ]; then

/usr/bin/vmstat > $DATE_DIR/vmstat.dump 2>&1

echo -e ".c"

fi

if [ -r /usr/bin/free ]; then

/usr/bin/free -t > $DATE_DIR/free.dump 2>&1

echo -e ".c"

fi

if [ -r /usr/bin/sar ]; then

/usr/bin/sar > $DATE_DIR/sar.dump 2>&1

echo -e ".c"

fi

if [ -r /usr/bin/uptime ]; then

/usr/bin/uptime > $DATE_DIR/uptime.dump 2>&1

echo -e ".c"

fi

 

echo "OK!"

echo "DUMP: $DATE_DIR"

至于这些文件是干嘛的,相信作为一个程序猿不用老夫一一解释了,聪明如您,一定一眼就能看出来了,如果您的shell水平目前还不够,可以先看看老夫的这篇文章,看完之后再看这几个脚本可以说完全无压力。

本文转载自:http://www.bridgeli.cn/archives/236

流萤飘枫丶
粉丝 12
博文 176
码字总数 106070
作品 0
成都
程序员
私信 提问
dubbo框架Demo之dubbo-admin管理平台和zookeeper注册中心搭建

dubbo框架Demo之dubbo-admin管理平台和zookeeper注册中心搭建 一、安装环境 系统软件环境 单机 系统Centos7.3 java: jdk1.8.0_181 maven: apache-maven-3.5.4 tomcat: apache-tomcat-8.5.30...

bestlope
2018/09/07
0
0
基于dubbo快速发布restful服务

本文使用官方项目示例,基于dubbox发布restful服务。jdk,eclipse、maven神马环境的就不讲了,自行baidu之。 dubbox下载、编译 下载地址:https://github.com/dangdangdotcom/dubbox 下载方式...

不简单666
2017/05/21
0
0
dubbo-2.5.4的分布式入门的第一次实例

准备工作 1:github上下载源码,导入到eclipse修改pom.xml,编译上传到自己的maven私服中。 2:安装zookeeper-3.4.6。 3:把dubbo项目中的dubbo-admin拷到tomcat中并启用。 项目名为tdubbo(...

独钓渔
2016/09/03
497
0
如何完成一次Apache的版本发布

理解Apache发布的内容和流程 总的来说,Source Release是Apache关注的重点,也是发布的必须内容;而Binary Release是可选项,Dubbo可以选择是否发布二进制包到Apache仓库或者发布到Maven中央...

中间件小哥
2018/09/04
0
0
关于springboot + dubbo 部署启动方式(Windows版)

项目结构 注:项目构建通过: http://start.spring.io/ 快速构建web 项目, 具体操作可以参考《SpringBoot使用SpringDataJPA完成数据查询 -Demo》。 本次项目搭建应用的组件是springboot + du...

摘星族
01/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS 7 搭建源码包搭建LNMP环境

1,安装epel源 yum install -y epel-release 2, 安装需要的软件 yum install -y gcc automake autoconf libtool make gcc-c++ glibc libxslt-devel \libjpeg libjpeg-devel libpng libpng......

hansonwong
44分钟前
6
0
基于 K8s 做应用发布的工具那么多, 阿里为啥选择灰姑娘般的 Tekton ?

作者 | 邓洪超,阿里云容器平台工程师, Kubernetes Operator 第二人,云原生应用标准交付与管理领域知名技术专家 导读:近年来,越来越多专门给 Kubernetes 做应用发布的工具开始缤纷呈现,...

阿里巴巴云原生
46分钟前
3
0
ZStack的普惠云计算到底是“随大流”还是真功夫?(转自社区)

作为一名深耕技术圈的“老男人”,也算是经历过云计算领域的成长。近些年云计算技术不断成熟,百行百业开始云上之路,各大云计算厂商开始逐渐意识到云计算是一项“普惠”技术。 我一直很看好...

ZStack社区版
47分钟前
4
0
一个备份MySQL数据库的简单Shell脚本

Shell脚本是我们写不同类型命令的一种脚本,这些命令在这一个文件中就可以执行。我们也可以逐一敲入命令手动执行。如果我们要使用shell脚本就必须在一开始把这些命令写到一个文本文件中,以后...

旺仔大战肥五花
51分钟前
2
0
TiDB Binlog 源码阅读系列文章(四)Pump server 介绍

作者: satoru 在 上篇文章 中,我们介绍了 TiDB 如何通过 Pump client 将 binlog 发往 Pump,本文将继续介绍 Pump server 的实现,对应的源码主要集中在 TiDB Binlog 仓库的 pump/server.go...

TiDB
56分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部