使用maven-assembly-plugin打包dubbo接口

来源:互联网 发布:乐视有没有mac版 编辑:程序博客网 时间:2024/05/22 12:51

      之前刚开始学习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
@echooff & setlocal enabledelayedexpansion
 
set LIB_JARS=""
cd ..\lib
for%%i in (*) doset 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
gotoend
 
: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
gotoend
 
: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"
    exit1
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!"
        exit1
    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_JARScom.alibaba.dubbo.container.Main > $STDOUT_FILE2>&1 &
 
COUNT=0
while[ $COUNT-lt 1 ]; do   
    echo-e ".\c"
    sleep 1
    if[ -n "$SERVER_PORT"]; then
        if[ "$SERVER_PROTOCOL"== "dubbo"]; then
            COUNT=`echostatus | 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!"
    exit1
fi
 
if[ "$1"!= "skip"]; then
    $BIN_DIR/dump.sh
fi
 
echo-e "Stopping the $SERVER_NAME ...\c"
forPID in $PIDS; do
    kill$PID > /dev/null 2>&1
done
 
COUNT=0
while[ $COUNT-lt 1 ]; do   
    echo-e ".\c"
    sleep 1
    COUNT=1
    forPID 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"
                    exit1
                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!"
    exit1
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"
forPID 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
0 0
原创粉丝点击