把maven打的jar包部署为windows启动服务

首先准备好要部署的jar,这里我部署的jar是windtdb-0.0.1-SNAPSHOT.jar。 1. 第一种方法:javaservice.exe 开源的,下载地址 http://javaservice.objectweb.org 解压到一个路径下,我是解压到E盘的。没错解压出来就一个javaservice.exe.然后把jar也放在同一目录下(主要是为了方便找到);然后新建两个文本service_err.log(记录安装出错的日志)和service_out.log(这个我不知道,尴尬)。然后开始写安装的脚本文件install.bat

@echo off  
rem 修改控制台颜色  
color 1d  
rem * 使用JavaService将windTimer安装为Windows服务的脚本  
rem *  
rem * JavaService - Windows NT Service Daemon for Java applications  
rem * Copyright (C) 2006 Multiplan Consultants Ltd. LGPL Licensing applies  
rem * Information about the JavaService software is available at the ObjectWeb  
rem * web site. Refer to http://javaservice.objectweb.org for more details.   
rem 开始批处理文件中环境改动的本地化操作,在使用endlocal后环境将恢复到原先的内容  
SETLOCAL  
rem 设置环境变量,指向当前路径  
SET BASE_PATH=%CD%
rem 设置Java path: jre_home  
SET JRE_HOME=C:\Program Files\Java\jre1.8.0_131
  
rem 判断JRE_HOME是否正确  
if "%JRE_HOME%" == "" goto no_java
if not exist "%JRE_HOME%\bin\java.exe" goto no_java
  
rem 设置jvm内存分配情况  
set JVM_MEMORY=-Xms128m -Xmx256m  
rem 设置jvmdll使用哪一种模式  
SET jvmdll=%JRE_HOME%\bin\server\jvm.dll
if not exist "%jvmdll%" goto no_java  
  
rem 设置JavaService路径  
set JSBINDIR=E:\java_service
set JSEXE=%JSBINDIR%\JavaService.exe
  
rem 判断jar是否正确  
SET acctjar=%BASE_PATH%\windtdb-0.0.1-SNAPSHOT.jar
if not exist "%acctjar%" goto no_peer
  
@echo . Using following version of JavaService executable:  
@echo .  
"%JSEXE%" -version  
@echo .  
  
rem parameters and files seem ok, go ahead with the service installation  
@echo .  
  
rem 处理该批处理的输入参数,后台服务启动模式:自动  
SET svcmode=  
if "%1" == "-manual" SET svcmode=-manual  
if "%1" == "-auto" SET svcmode=-auto  
  
rem 设置JAVA_OPTS  
set JAVA_OPTS=%JAVA_OPTS% -Djava.class.path="%BASE_PATH%\windtdb-0.0.1-SNAPSHOT.jar"  
set JAVA_OPTS=%JAVA_OPTS% %JVM_MEMORY%  
  
rem 设置startstop  启动的是你的主类
SET START_STOP=-start org.springframework.boot.loader.JarLauncher  
  
  
rem 设置Log文件路径  
set OUT_ERR=-out "%BASE_PATH%\service_out.log" -err "%BASE_PATH%\service_err.log"  
  
rem 设置desp  
set DESP=-description "Wind Service"   
  
rem 设置执行命令行  
set runcmd="%JSEXE%" -install WindService
set runcmd=%runcmd% "%jvmdll%"
set runcmd=%runcmd% %JAVA_OPTS%
set runcmd=%runcmd% %START_STOP%
set runcmd=%runcmd% %OUT_ERR%
set runcmd=%runcmd% -current
set runcmd=%runcmd% "%BASE_PATH%"
set runcmd=%runcmd% %svcmode%
set runcmd=%runcmd% -overwrite
set runcmd=%runcmd% -startup 6
set runcmd=%runcmd% %DESP%
echo %runcmd%  

rem 执行安装命令  
%runcmd%  
rem 启动服务  
net start WindService
  
if ERRORLEVEL 1 goto js_error  
goto end  
:no_java
@echo . 没有Java运行环境,安装脚本不能运行  
goto error_exit  
:no_peer
@echo . 启动文件wind.jar不存在,安装脚本不能运行  
goto error_exit   
:no_jsexe
@echo . 可执行文件JavaService.exe 不存在,安装脚本不能运行  
goto error_exit  
:js_error
@echo . WindService在安装为服务的过程中发生了错误,请检查相关日志文件  
goto error_exit  
:error_exit

@echo .  
@echo . 安装失败,不能将 WindApplication安装为Windows服务  
@echo .  
@echo . 命令格式:  
@echo .  
@echo .  %~n0 [-auto / -manual] [-np]  
@echo .  
@echo . 其中:  
@echo .  -auto (默认) or -manual 参数说明了服务的启动模式:自动或者手动  
@echo .  -np 批处理命令执行完毕后不暂停  
@echo .  
@echo . 比如:  
@echo .  %~n0 -auto -np  
:end

ENDLOCAL  
@echo .  
if "%2" NEQ "-np" @pause

其中注意的是:配置启动主类那个类可以把jar加压出来找到META-INF\MANIFEST.MF,打开 ![把maven打的jar包部署为windows启动服务_第1张图片]

这里是用spring boot进行开发的所以主类是Main-Class: org.springframework.boot.loader.JarLauncher,她再去启动Start-Class: com.windtdb.WindtdbApplication这个程序。然后双击运行bat,运行就好了。如果没有安装成功可以去service_err.log查看。

 如果想卸载该服务,就编辑uminstall.bat
@echo off  
  
rem 修改控制台颜色  
color 1d  
  
rem * 使用JavaService卸载WindService服务的脚本  
rem *  
rem * JavaService - Windows NT Service Daemon for Java applications  
rem * Copyright (C) 2006 Multiplan Consultants Ltd. LGPL Licensing applies  
rem * Information about the JavaService software is available at the ObjectWeb  
rem * web site. Refer to http://javaservice.objectweb.org for more details.  
  
rem 开始批处理文件中环境改动的本地化操作,在使用endlocal后环境将恢复到原先的内容  
SETLOCAL  
  
rem 设置环境变量  
SET BASE_PATH=E:\
  
rem 设置JavaService的路径  
set JSBINDIR=%BASE_PATH%\\java_service
set JSEXE=%JSBINDIR%\JavaService.exe
  
rem 卸载服务前先停止服务  
net stop WindService 
  
rem 设置执行命令行  
set runcmd="%JSEXE%" -uninstall WindService 
  
%runcmd%  
  
@echo .  
  
ENDLOCAL  
@echo .  
if "%2" NEQ "-np" @pause

双击运行就完成啦。篇幅太长,第二种方法下次写。

转载于:https://my.oschina.net/u/3546529/blog/994411

你可能感兴趣的:(操作系统,java)