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

时间:2022-12-20 02:54:08

      之前刚开始学习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水平目前还不够,可以先看看这篇文章,看完之后再看这几个脚本可以说完全无压力。

分享到: