1.简单的jar包在linux上跑使用java -jar 命令执行。但通常这不满足项目需要。尤其是配置文件修改。
2.项目结构。一般是lib文件夹,config文件夹,logs文件夹。将config中的配置文件需要加载到项目的classpath中。使用shell脚本会非常方便。
3.jar包方面。通常会有一个程序的jia,包含主方法的,以及其它依赖jar。都知道需要将其它jia引入到classpath中,使用到一个MANIFEST.MF的文件。我项目使用的是idea开发,使用maven编辑,pom.xml中配置build。就可以实现。
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.3.1</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <mainClass>com.csr.receive.main.StartUp</mainClass> </manifest> </archive> </configuration> </plugin></plugins> </build>
4.编译后,使用java -jar 命令能执行了,反编译后可以看到,jia里包括了配置文件。我们平时修改配置就非常不方便。如图:
5.将配置文件单独出来放在项目外的config目录下,编写shell脚本实现,过程折腾了很长时间,直接贴上脚本了。文件名为.sh结尾。放在项目名称下的目录。启动那边将./config,./lib 目录下都放进了classpath。其他配置项目名称APP_HOME,和source路劲了。主方法和项目jar包对应修改下即可用。
#! /bin/sh
source /home/csr/.bash_profile
pid_file='server.pid'
APP_HOME='/home/csr/csr-server'
start()
{
>$APP_HOME/logs/day.log
echo $"Starting main server ......"
nohup java -server -Xms50m -Xmx512m -XX:+UseParNewGC -cp ./config:./lib/csr-receive-1.0-SNAPSHOT.jar com.csr.receive.main.StartUp >$APP_HOME/logs/day.log 2>&1 &
echo $! > $pid_file
echo $"main server started!"
}
stop()
{
echo $"Stopping main server ......"
pid=`cat $pid_file`
kill -9 $pid
echo "stop "$pid
mv logs/day.log logs/day.log.bak_`date +%m%d%H%M`
sleep 1
}
restart()
{
>$APP_HOME/logs/day.log
stop
sleep 3
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac