1.定义插件
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
|
<properties> <maven-jar-plugin.version> 2.4 </maven-jar-plugin.version> <maven-assembly-plugin.version> 2.4 </maven-assembly-plugin.version> <maven-compiler-plugin.version> 3.7 . 0 </maven-compiler-plugin.version> </properties> <plugins> <!-- compiler --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>${maven-compiler-plugin.version}</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> <encoding>${project.build.sourceEncoding}</encoding> </configuration> <executions> <execution> <phase>compile</phase> <goals> <goal>compile</goal> </goals> </execution> </executions> </plugin> <!--jar plugin --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>${maven-jar-plugin.version}</version> <configuration> <archive> <manifest> <addClasspath> true </addClasspath> <!--<mainClass></mainClass>--> </manifest> </archive> <excludes> <!--<exclude></exclude>--> </excludes> </configuration> </plugin> <!--assembly plugin --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>${maven-assembly-plugin.version}</version> <configuration> <descriptors> <descriptor>${project.basedir}/../assembly/assembly.xml</descriptor> </descriptors> </configuration> <executions> <execution> <id>make-assembly</id> <phase> package </phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> |
2.assembly配置
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
|
<assembly> <id>bin</id> <formats> <format>tar.gz</format> </formats> <dependencySets> <!-- runtime scope jar --> <dependencySet> <useProjectArtifact> false </useProjectArtifact> <outputDirectory>lib</outputDirectory> <unpack> false </unpack> <scope>runtime</scope> </dependencySet> <!-- system scope jar --> <dependencySet> <useProjectArtifact> false </useProjectArtifact> <outputDirectory>lib</outputDirectory> <unpack> false </unpack> <scope>system</scope> </dependencySet> </dependencySets> <fileSets> <!-- script --> <fileSet> <directory>${project.basedir}/../scripts</directory> <outputDirectory>bin</outputDirectory> <fileMode> 0644 </fileMode> <directoryMode> 0755 </directoryMode> <filtered> true </filtered> </fileSet> <!-- config --> <fileSet> <directory>${project.basedir}/src/main/resources</directory> <outputDirectory>config</outputDirectory> <fileMode> 0644 </fileMode> <directoryMode> 0755 </directoryMode> <includes> <include>*.xml</include> <include>*.json</include> <include>*.properties</include> </includes> <filtered> true </filtered> </fileSet> <!-- the project jar --> <fileSet> <directory>${project.build.directory}</directory> <outputDirectory>lib</outputDirectory> <includes> <include>*.jar</include> </includes> </fileSet> <!-- Document --> <fileSet> <directory>${project.basedir}</directory> <outputDirectory>doc</outputDirectory> <includes> <include>README*</include> <include>LICENSE*</include> <include>NOTICE*</include> </includes> </fileSet> </fileSets> </assembly> |
3.脚本
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
|
#!/bin/sh #server id -- change SERVER_ID= #java home JAVA_HOME= #java command JAVA_CMD=`which java` #jvm option JVM_OPT= "-Xmx1024M -Xms512M -server -XX:+PrintGCDetails -XX:+PrintGCDateStamps" #jar name JAR=${project.artifactId}-${project.version}.jar #main class MAIN_CLASS=${MainClass} # main class args ARGS= "${StartArgs}" #environment ENVIRONMENT=${profiles.environment} #cd working path cd_working_path(){ cd `dirname $ 0 ` cd .. } #jar jar(){ WK_PATH=`pwd` /usr/bin/nohup ${JAVA_CMD} -Denvironment=${ENVIRONMENT} -Dlog4j.configurationFile=${WK_PATH}/config/log4j2.xml ${JVM_OPT} -cp ${WK_PATH}/lib/${JAR}:${WK_PATH}/lib/* ${MAIN_CLASS} ${ARGS} >/dev/ null 2 >& 1 & } #get pid get_pid(){ echo `ps -ef | grep ${JAR} | grep server_id=${SERVER_ID} |grep -v 'grep' |awk '{print $2}' ` } #check check(){ #check server id if [ ! -n "$SERVER_ID" ];then echo "Please set up the server id 'SERVER_ID'" exit fi } #start service start(){ #check check #check pid PID=`get_pid` if [ -n "$PID" ];then echo "Process exists, PID >> " ${PID} exit fi #check java if [ -n "$JAVA_HOME" ];then JAVA_CMD=${JAVA_HOME}/bin/java fi #start service ${JAVA_CMD} -version jar #check if [ $? -ne 0 ];then echo "Service startup failed." exit fi #check service PID=`get_pid` if [ ! -n "$PID" ];then echo "Service startup failed." else echo "Service startup success, Current environment is ${ENVIRONMENT} , PID >> " ${PID} fi } #stop service stop(){ #check check #check pid PID=`get_pid` if [ ! -n "$PID" ];then echo "Process not exists." else kill ${PID} echo "Kill pid >> '$PID'" if [ $? -ne 0 ];then echo "Service shutdown failed." exit else echo "Service shutdown success." fi fi } #restart service restart(){ #stop service stop COUNT= 0 while true do PID=`get_pid` if [ ! -n "$PID" ];then #start service start break else let COUNT++ echo "Restarting..." if [ ${COUNT} -eq 3 ];then echo "Restart error" exit fi fi sleep 3 done } #check state state(){ PID=`get_pid` if [ ! -n "$PID" ];then echo "Service not exists." else echo "Service status is normal, PID >> '$PID'" fi } #main main(){ #cd working path cd_working_path if [ ! -n "$1" ];then echo "***********************************************" echo "* start : Start service *" echo "* stop : Stop service *" echo "* restart : Restart service *" echo "* state : Check service state *" echo "***********************************************" read -p "Please choose >> " : CASE PARAMETER=${CASE} else PARAMETER=$ 1 fi case "$PARAMETER" in start) start ;; stop) stop ;; restart) restart ;; state) state ;; *) main ;; esac } main $ 1 |
PS:下面看下Maven打包生成可运行bat/sh脚本文件
利用Maven的appassembler-maven-plugin插件,就可以实现自动打包可运行的脚本,还可以跨平台。
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
|
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>appassembler-maven-plugin</artifactId> <version> 1.1 . 1 </version> <configuration> <repositoryLayout>flat</repositoryLayout> <repositoryName>lib</repositoryName> <configurationSourceDirectory>src/main/resources/conf</configurationSourceDirectory> <!-- Set the target configuration directory to be used in the bin scripts --> <configurationDirectory>conf</configurationDirectory> <!-- Copy the contents from "/src/main/config" to the target configuration directory in the assembled application --> <copyConfigurationDirectory> true </copyConfigurationDirectory> <!-- Include the target configuration directory in the beginning of the classpath declaration in the bin scripts --> <includeConfigurationDirectoryInClasspath> true </includeConfigurationDirectoryInClasspath> <!-- prefix all bin files with "mycompany" --> <binPrefix>startup</binPrefix> <!-- set alternative assemble directory --> <assembleDirectory>${project.build.directory}/server</assembleDirectory> <!-- Extra JVM arguments that will be included in the bin scripts --> <extraJvmArguments>-Xms768m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256m -XX:NewSize=192m -XX:MaxNewSize=384m </extraJvmArguments> <!-- Generate bin scripts for windows and unix pr default --> <platforms> <platform>windows</platform> <platform>unix</platform> </platforms> <programs> <program> <mainClass>com.coderli.onecoder.server.HypervisorServer</mainClass> <name>startup</name> </program> </programs> </configuration> </plugin> |
然后选择要编译的工程,右键->maven build… 命令如下图:
package appassembler:assemble
然后执行run,一个可执行的脚本文件就生成好了。startup.bat是windows下的,startup.sh是linux下的
总结
原文链接:https://blog.csdn.net/zzxjan/article/details/81205204