详解Maven项目利用java service wrapper将Java程序生成Windows服务
在项目的开发中,有时候需要将Java应用程序打包成Windows服务,我们就直接可以通过windows的服务来启动和关闭java程序了。
本博文将通过有两种方法实现该功能,手动创建法和Maven自动打包法。
一. 准备
下载java service wrapper
网址:http://sourceforge.net/projects/wrapper/或http://wrapper.tanukisoftware.com/doc/english/download.jsp
我下载的版本是wrapper-windows-x86-64-3.5.26-st.zip。
二.手动创建法
1. 配置过程
1)首先确定你的电脑上有java运行环境,没有的话请安装。
2)将你的java程序打包成jar包。(我的jar的名称为wrapper-0.0.1-SNAPSHOT.jar,main方法所在类App)
3)在硬盘上创建文件夹test,并在其下创建文件夹bin, conf, lib, logs。
4)解压wrapper-windows-x86-64-3.5.26-st.zip, 并将其bin目录下的Wrapper.exe、src/bin目录下的App.bat.in、InstallApp-NT.bat.in、UninstallApp-NT.bat.in文件
拷贝到test的bin目录中,并分别改名为App.bat、InstallApp-NT.bat、UninstallApp-NT.bat。
5)将其lib目录下的Wrapper.DLL、wrapper.jar拷贝到test的lib目录中。并且将项目的jar和所用到的jar都拷贝到该目录(包括你自己的java程序jar)。
6)将其src/conf目录下的wrapper.conf.in拷贝到workapp的conf目录中,并命名为wrapper.conf。
2. 修改wrapper.conf文件
主要修改下面几项:
(1)JVM位置:
wrapper.java.command=C:\jdk1.5.0_07\bin\java或者 wrapper.java.command=%JAVA_HOME%/bin/java(需要在系统的环境变量里配置JAVA_HOME)
(2)MAIN CLASS 此处决定了使用Java Service Wrapper的方式
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
(3)你的Java程序所需的jar包必须全部在此标明,注意路径准确:
wrapper.java.classpath.1=../lib/wrapper-0.0.1-SNAPSHOT.jar
wrapper.java.classpath.2=../lib/wrapper.jar
wrapper.java.classpath.3=../lib/sqljdbc4.jar
……
(4)你的Wrapper.DLL或wrapper.jar所在的目录
wrapper.java.library.path.1=../lib
(5)你的Java应用程序的运行类(主类)
wrapper.app.parameter.1= window_wrapper.wrapper.App
(6)注册为服务的名称和显示名,你可以随意进行设置
wrapper.name=testwrapper
wrapper.displayname= Test Wrapper Sample Application
(7)服务描述信息
wrapper.description= Test Wrapper Sample ApplicationDescription
(8)服务的启动类型
# Mode in which the service isinstalled. AUTO_START, DELAY_START or DEMAND_START
wrapper.ntservice.starttype=AUTO_START
3. 修改好了以后,运行MyApp.bat即可运行你的java程序,这里可以测试配置的是否正确,如果可以运行,证明配置ok。
4. 运行InstallApp-NT.bat可以进行服务的注册,UninstallApp-NT.bat为注销服务。
5. 运行完注册服务InstallApp-NT.bat可以在 控制面板-管理程序-服务中看到你注册的服务名称。(如:Test Wrapper Sample Application)
三.Maven自动打包法
1. pom.xml文件引入相关的Maven plugins
- <span style="font-size:14px;"><build>
- <resources>
- <resource>
- <directory>${project.basedir}/src/main/resources</directory>
- </resource>
- <resource>
- <targetPath>../mywrapper/etc</targetPath>
- <directory>${project.basedir}/src/main/resources/</directory>
- <includes>
- <include>**/*.xls</include>
- <include>**/*.xml</include>
- <include>**/*.properties</include>
- <include>**/*.bat</include>
- </includes>
- </resource>
- <resource>
- <targetPath>../wrapper/jsw/mywrapper/bin</targetPath>
- <directory>${project.basedir}/src/main/resources/</directory>
- <includes>
- <include>**/*.bat</include>
- </includes>
- </resource>
- <resource>
- <targetPath>../wrapper/jsw/mywrapper/etc</targetPath>
- <directory>${project.basedir}/src/main/resources/</directory>
- <includes>
- <include>**/*.xls</include>
- <include>**/*.xml</include>
- <include>**/*.properties</include>
- <include>**/*.bat</include>
- </includes>
- </resource>
- </resources>
- <testResources>
- <testResource>
- <directory>${project.basedir}/src/test/java</directory>
- </testResource>
- <testResource>
- <directory>${project.basedir}/src/main/resources</directory>
- </testResource>
- </testResources>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>3.1</version>
- <configuration>
- <source>1.6</source>
- <target>1.6</target>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>appassembler-maven-plugin</artifactId>
- <version>1.3</version>
- <executions>
- <execution>
- <id>generate start scripts</id>
- <phase>package</phase>
- <goals>
- <goal>assemble</goal>
- </goals>
- <configuration>
- <repositoryLayout>flat</repositoryLayout>
- <programs>
- <program>
- <!-- 通过批处理 运行Main类 -->
- <mainClass>
- window_wrapper.wrapper.App
- </mainClass>
- <name>init_app</name>
- </program>
- </programs>
- </configuration>
- </execution>
- <execution>
- <phase>package</phase>
- <goals>
- <goal>generate-daemons</goal>
- </goals>
- <configuration>
- <repositoryLayout>flat</repositoryLayout>
- <target>${project.build.directory}/wrapper</target>
- <includeConfigurationDirectoryInClasspath>true</includeConfigurationDirectoryInClasspath>
- <useDaemonIdAsWrapperConfName>true</useDaemonIdAsWrapperConfName>
- <daemons>
- <daemon>
- <id>mywrapper</id>
- <!-- 打包成windows服务的Main类 -->
- <mainClass>window_wrapper.wrapper.App</mainClass>
- <!-- <commandLineArguments> <commandLineArgument>start</commandLineArgument>
- </commandLineArguments> -->
- <!-- <jvmSettings> <initialMemorySize>20M</initialMemorySize> <maxMemorySize>200M</maxMemorySize>
- <maxStackSize>128M</maxStackSize> </jvmSettings> -->
- <platforms>
- <platform>jsw</platform>
- </platforms>
- <generatorConfigurations>
- <generatorConfiguration>
- <generator>jsw</generator>
- <includes>
- <include>linux-x86-32</include>
- <include>linux-x86-64</include>
- <include>macosx-universal-32</include>
- <include>macosx-universal-64</include>
- <include>windows-x86-32</include>
- <include>windows-x86-64</include>
- </includes>
- <configuration>
- <property>
- <name>configuration.directory.in.classpath.first</name>
- <value>etc</value>
- </property>
- </configuration>
- </generatorConfiguration>
- </generatorConfigurations>
- </daemon>
- </daemons>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>cobertura-maven-plugin</artifactId>
- <version>2.5.2</version>
- <configuration>
- <formats>
- <format>html</format>
- <format>xml</format>
- </formats>
- </configuration>
- </plugin>
- </plugins>
- </build>
- <reporting>
- <plugins>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>cobertura-maven-plugin</artifactId>
- <version>2.5.2</version>
- </plugin>
- </plugins>
- </reporting>
- </span>
2. 解压wrapper-windows-x86-32-3.5.20.zip, src/bin目录下的InstallApp-NT.bat.in、UninstallApp-NT.bat.in文件,修改成InstallApp-Nt.bat和Uninstall-Nt.bat
3. ..\target\appassembler\bin目录下的init_app.bat批处理文件 运行打包的main方法
4. 将2中的InstallApp-Nt.bat和Uninstall-Nt.bat复制到..\target\wrapper\jsw\mywrapper\bin目录,或者在程序resources目录中放入InstallApp-Nt.bat和Uninstall-Nt.bat。
同时将installApp-Nt.bat和Unistall-Nt.bat中的_WRAPPER_CONF_DEFAULT值替换成..\target\wrapper\jsw\mywrapper\bin目录mywrapper.bat中
_WRAPPER_CONF值
如果都为Maven项目,第二种比第一种简单,不需要手动的去添加生成架包和引用架包,maven会帮我们自动的打入。
示例项目下载地址:http://download.csdn.net/detail/a123demi/8390851
详解Maven项目利用java service wrapper将Java程序生成Windows服务的更多相关文章
- java service wrapper将java程序包装成系统服务(一)
一. 概述 使用java语言开发应用程序,在windows平台下,一般存在3种应用形式: 1. web应用.web应用多数打成war包在web容器(如tomcat,jetty等)中运行. 2. 桌面应 ...
- 利用Java Service Wrapper将java项目添加到windows服务中
1.web项目,即tomcat/resin添加至window系统服务,步骤如下:第一步:找到tomcat的bin目录,如:D:\apache-tomcat-8.0.26\bin第二步:打开cmd,cd ...
- 利用JAVA Service Wrapper把JAVA程序做成windows服务
今天做了一个读取数据入库的程序.由于读取的数据每天都更新,于是就想把程序做成一个服务,每天定时执行.研究了一下,发现有几种方式可以做.下面我主要记录一下JAVA Service Wrapper方式. ...
- Java Service Wrapper将java程序设置为服务
有时候我们希望我们java写的程序作为服务注册到系统中,Java Service Wrapper(下面简称wrapper)是目前较为流行的将Java程序部署成Windows服务的解决方案, 本文将讨论 ...
- Java Service Wrapper 发布Java程序为Windows服务
下载Windows版本:https://www.krenger.ch/blog/java-service-wrapper-3-5-37-for-windows-x64/ 转自:F:\java\bhGe ...
- Java Service Wrapper 发布Java程序或者jar包为Windows服务
下载Windows版本:http://nchc.dl.sourceforge.net/sourceforge/wrapper/wrapper-windows-x86-32-3.2.3.zip 现在目前 ...
- 使用Java Service Wrapper将java程序作为linux服务并且开机自动启动
以java应用程序为例,打包为tianlong.jar,程序入口为tianlong.QueueTest. 下面在linux的/opt下建立tianlong目录,复制tianlong.jar到/opt/ ...
- 使用java service wrapper将java程序注册为window服务
1.下载java service wrapper 下载地址:http://wrapper.tanukisoftware.com/doc/english/download.jsp 针对自己的需求下载相应 ...
- 使用 Java Service Wrapper 启动java后台进程服务
Java Service Wrapper (http://wrapper.tanukisoftware.com/doc/english/product-overview.html)可以很方便得在各个平 ...
随机推荐
- DTD 和 Schema简介
什么是DTD? DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块. 它使用一系列的合法元素来定义文档结构. DTD例子 <?xml version="1.0"? ...
- win8.1使用WP8SDK出现Windows Phone Emulator无法启动的问题解决方案
近期在win8.1专业版系统的vs2012上装了wp8SDK 体验一把wp开发的快感 安装sdk过程一切顺利 打完代码之后运行调试 问题来了: 提示如下错误 遂百度之 主要的方法就是两步 1.检查机器 ...
- Android 百度地图 简单实现--- 美食搜索
Android 百度地图 简单实现--- 美食 依赖包: 加入 Android 百度依赖包: 1 key: <!-- 开发人员 key --> <meta-dat ...
- 关于八数码问题中的状态判重的三种解决方法(编码、hash、<set>)
八数码问题搜索有非常多高效方法:如A*算法.双向广搜等 但在搜索过程中都会遇到同一个问题.那就是判重操作(假设反复就剪枝),怎样高效的判重是8数码问题中效率的关键 以下关于几种判重方法进行比較:编码. ...
- 关于其它模块的设计,有非常多须要自己去构建和完毕,在这里就简单地举几个样例来看看其它模块的设计。我们要做的就是有更改password模块,客户选择模块和关于本软件模块。更改password模块用来更改管理员的password,客户选择对话框模块用来选择已加入的客户,关于本软件模块用来说明客户管理系统的一些必要信息和制作人的信息。
五,其它模块设计 关于其它模块的设计,有非常多须要自己去构建和完毕,在这里就简单地举几个样例来看看其它模块的设计. 我们要做的就是有更改password模块.客户选择模 ...
- BZOJ 4216 Pig 分块乱搞
题意:id=4216">链接 方法:分块以节约空间. 解析: 这题坑的地方就是他仅仅有3M的内存限制,假设我们开longlong前缀和是必死的. 所以考虑缩小这个long long数组 ...
- Burp Suite Intruder的4种攻击类型
位置:Intruder>1(通常为数字)>Positions,Attack Type下拉有四种,分别为 一.Sniper(狙击手模式) 狙击手模式使用一组payload集合,它一次只使用一 ...
- JDBC技术总结(三)
1. 数据库连接池 JDBC部分的前两个总结主要总结了一下JDBC的基本操作,而且有个共同点,就是应用程序都是直接获取数据库连接的.这会有个弊端:用户每次请求都需要向数据库获得连接,而数据库创建连接通 ...
- block知识点
1.block引用局部变量的时候,该变量会作为常量编码到block中,在block中不能被修改. 2.使用 __block修饰的局部变量,不会作为常量被编码到block中,故而在block中可以被修改 ...
- 转 拉姆达表达式,委托、匿名方法、Lambda表达式的演进
总结:Lambda表达式的语法:(参数列表=>执行语句) 无参数格式 :()=>{执行语句} 有参数格式:x=> x % 2 == 0 1.假设给我们一个泛型对象List<T& ...