maven打可执行jar包

1 前言
本文示例基于dubbo的系统架构,jar包程序入口使用dubbo框架提供的com.alibaba.dubbo.container.Main方法。
2 软件架构(部分)
xd-parent(maven父配置)
xd-common(公共工程)
xd-service-test(dubbo test服务提供者:依赖xd-common)
xd-web(dubbo服务消费者)
3 以xd-service-test工程打成可执行jar包为例
3.1 配置xd-service-test工程中pom文件,在build节点中加入如下内容


	
	
		${project.build.directory}/classes
		
		src/main/resources
		true
		
			**/*.xml
			**/*.properties
		
	

	
	
		${project.build.directory}/classes/META-INF/spring
		src/main/resources/spring
		true
		
			spring-context.xml
		
	



	
		
		
			org.eclipse.m2e
			lifecycle-mapping
			1.0.0
			
				
					
						
							
								org.apache.maven.plugins
								maven-dependency-plugin
								[2.0,)
								
									copy-dependencies
								
							
							
								
							
						
					
				
			
		
	



	
	
		org.apache.maven.plugins
		maven-jar-plugin
		
			target/classes/
			
				
					
					com.alibaba.dubbo.container.Main
					
					false
					true
					
					lib/
				
				
					
					.
				
			
		
	
	
	
		org.apache.maven.plugins
		maven-dependency-plugin
		
			
				copy-dependencies
				package
				
					copy-dependencies
				
				
					jar
					jar
					false
					
						${project.build.directory}/lib
					
				
			
		
	



注意:spring配置文件中,导入其它配置文件时,需要加入classpath。
因为读取spring配置文件位置发生变化,dubbo-provider.xml等文件并不与spring配置文件同目录了。

3.2 对xd-parent工程及xd-service-test的所有依赖工程(根据依赖关系),依次执行maven install 命令。
(eclipse中单击右键项目名–> Run as–> Maven install)

对xd-service-test项目执行install命令时,maven会去本地仓库寻找依赖工程的jar包;所以需要把所有依赖工程,依次执行install命令(打包并部署到本地仓库)

3.3 对xd-service-test项目执行install命令
target目录下会生成lib目录及xd-service-test.jar包(生成的其它文件可删除)

到此,maven打可执行jar包完成。

3.4 通过java -jar xd-service-test.jar & 可运行项目
生产中一般使用shell脚本维护项目启停,例如:
./xd-service-test.sh start
./xd-service-test.sh stop
./xd-service-test.sh restart

#!/bin/sh

## java env
export JAVA_HOME=/usr/local/jdk1.8.0_201
export JRE_HOME=$JAVA_HOME/jre

## service name
APP_NAME=test

SERVICE_DIR=/home/dubbo/service/$APP_NAME
SERVICE_NAME=xd-service-$APP_NAME
JAR_NAME=$SERVICE_NAME\.jar
PID=$SERVICE_NAME\.pid

cd $SERVICE_DIR

case "$1" in

    start)
        nohup $JRE_HOME/bin/java -Xms256m -Xmx512m -jar $JAR_NAME >/dev/null 2>&1 &
		echo $! > $SERVICE_DIR/$PID
		echo "*** start $SERVICE_NAME success"
		;;

    stop)
        kill `cat $SERVICE_DIR/$PID`
		rm -rf $SERVICE_DIR/$PID
		echo "*** stop $SERVICE_NAME"
	
		sleep 5
		P_ID=`ps -ef | grep -w "$SERVICE_NAME" | grep -v "grep" | awk '{print $2}'`
		if [ "$P_ID" == "" ]; then
		    echo "=== $SERVICE_NAME process not exists or stop success"
		else
		    echo "=== begin kill $SERVICE_NAME process,pid is:$P_ID"
		    kill -9 $P_ID
		    echo "=== stop $SERVICE_NAME success"
		fi
		;;

    restart)
        $0 stop
		sleep 2
		$0 start
		echo "=== restart $SERVICE_NAME success"
		;;

    *)
        echo "=== parameter error"
		;;
esac
exit 0

windows编辑的shell脚本,文件格式需要转换为unix格式。

4 延伸
解压xd-service-test.jar包,打开 META-INF目录下MANIFEST.MF文件,大体内容如下:

Manifest-Version: 1.0
Built-By: zombie
Build-Jdk: 1.7.0_80
# 打包插件:配置节点的值
Class-Path: . lib/xd-common-1.0-SNAPSHOT.jar lib/antlr-2.7.6.jar...等等依赖包
Created-By: Apache Maven 3.5.4
# 程序入口
Main-Class: com.alibaba.dubbo.container.Main
Archiver-Version: Plexus Archiver

你可能感兴趣的:(maven)