在项目的开发中,有时候需要将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

  1. <span style="font-size:14px;"><build>
  2. <resources>
  3. <resource>
  4. <directory>${project.basedir}/src/main/resources</directory>
  5. </resource>
  6. <resource>
  7. <targetPath>../mywrapper/etc</targetPath>
  8. <directory>${project.basedir}/src/main/resources/</directory>
  9. <includes>
  10. <include>**/*.xls</include>
  11. <include>**/*.xml</include>
  12. <include>**/*.properties</include>
  13. <include>**/*.bat</include>
  14. </includes>
  15. </resource>
  16. <resource>
  17. <targetPath>../wrapper/jsw/mywrapper/bin</targetPath>
  18. <directory>${project.basedir}/src/main/resources/</directory>
  19. <includes>
  20. <include>**/*.bat</include>
  21. </includes>
  22. </resource>
  23. <resource>
  24. <targetPath>../wrapper/jsw/mywrapper/etc</targetPath>
  25. <directory>${project.basedir}/src/main/resources/</directory>
  26. <includes>
  27. <include>**/*.xls</include>
  28. <include>**/*.xml</include>
  29. <include>**/*.properties</include>
  30. <include>**/*.bat</include>
  31. </includes>
  32. </resource>
  33. </resources>
  34. <testResources>
  35. <testResource>
  36. <directory>${project.basedir}/src/test/java</directory>
  37. </testResource>
  38. <testResource>
  39. <directory>${project.basedir}/src/main/resources</directory>
  40. </testResource>
  41. </testResources>
  42. <plugins>
  43. <plugin>
  44. <groupId>org.apache.maven.plugins</groupId>
  45. <artifactId>maven-compiler-plugin</artifactId>
  46. <version>3.1</version>
  47. <configuration>
  48. <source>1.6</source>
  49. <target>1.6</target>
  50. </configuration>
  51. </plugin>
  52. <plugin>
  53. <groupId>org.codehaus.mojo</groupId>
  54. <artifactId>appassembler-maven-plugin</artifactId>
  55. <version>1.3</version>
  56. <executions>
  57. <execution>
  58. <id>generate start scripts</id>
  59. <phase>package</phase>
  60. <goals>
  61. <goal>assemble</goal>
  62. </goals>
  63. <configuration>
  64. <repositoryLayout>flat</repositoryLayout>
  65. <programs>
  66. <program>
  67. <!-- 通过批处理 运行Main类 -->
  68. <mainClass>
  69. window_wrapper.wrapper.App
  70. </mainClass>
  71. <name>init_app</name>
  72. </program>
  73. </programs>
  74. </configuration>
  75. </execution>
  76. <execution>
  77. <phase>package</phase>
  78. <goals>
  79. <goal>generate-daemons</goal>
  80. </goals>
  81. <configuration>
  82. <repositoryLayout>flat</repositoryLayout>
  83. <target>${project.build.directory}/wrapper</target>
  84. <includeConfigurationDirectoryInClasspath>true</includeConfigurationDirectoryInClasspath>
  85. <useDaemonIdAsWrapperConfName>true</useDaemonIdAsWrapperConfName>
  86. <daemons>
  87. <daemon>
  88. <id>mywrapper</id>
  89. <!-- 打包成windows服务的Main类 -->
  90. <mainClass>window_wrapper.wrapper.App</mainClass>
  91. <!-- <commandLineArguments> <commandLineArgument>start</commandLineArgument>
  92. </commandLineArguments> -->
  93. <!-- <jvmSettings> <initialMemorySize>20M</initialMemorySize> <maxMemorySize>200M</maxMemorySize>
  94. <maxStackSize>128M</maxStackSize> </jvmSettings> -->
  95. <platforms>
  96. <platform>jsw</platform>
  97. </platforms>
  98. <generatorConfigurations>
  99. <generatorConfiguration>
  100. <generator>jsw</generator>
  101. <includes>
  102. <include>linux-x86-32</include>
  103. <include>linux-x86-64</include>
  104. <include>macosx-universal-32</include>
  105. <include>macosx-universal-64</include>
  106. <include>windows-x86-32</include>
  107. <include>windows-x86-64</include>
  108. </includes>
  109. <configuration>
  110. <property>
  111. <name>configuration.directory.in.classpath.first</name>
  112. <value>etc</value>
  113. </property>
  114. </configuration>
  115. </generatorConfiguration>
  116. </generatorConfigurations>
  117. </daemon>
  118. </daemons>
  119. </configuration>
  120. </execution>
  121. </executions>
  122. </plugin>
  123. <plugin>
  124. <groupId>org.codehaus.mojo</groupId>
  125. <artifactId>cobertura-maven-plugin</artifactId>
  126. <version>2.5.2</version>
  127. <configuration>
  128. <formats>
  129. <format>html</format>
  130. <format>xml</format>
  131. </formats>
  132. </configuration>
  133. </plugin>
  134. </plugins>
  135. </build>
  136. <reporting>
  137. <plugins>
  138. <plugin>
  139. <groupId>org.codehaus.mojo</groupId>
  140. <artifactId>cobertura-maven-plugin</artifactId>
  141. <version>2.5.2</version>
  142. </plugin>
  143. </plugins>
  144. </reporting>
  145. </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服务的更多相关文章

  1. java service wrapper将java程序包装成系统服务(一)

    一. 概述 使用java语言开发应用程序,在windows平台下,一般存在3种应用形式: 1. web应用.web应用多数打成war包在web容器(如tomcat,jetty等)中运行. 2. 桌面应 ...

  2. 利用Java Service Wrapper将java项目添加到windows服务中

    1.web项目,即tomcat/resin添加至window系统服务,步骤如下:第一步:找到tomcat的bin目录,如:D:\apache-tomcat-8.0.26\bin第二步:打开cmd,cd ...

  3. 利用JAVA Service Wrapper把JAVA程序做成windows服务

    今天做了一个读取数据入库的程序.由于读取的数据每天都更新,于是就想把程序做成一个服务,每天定时执行.研究了一下,发现有几种方式可以做.下面我主要记录一下JAVA Service Wrapper方式. ...

  4. Java Service Wrapper将java程序设置为服务

    有时候我们希望我们java写的程序作为服务注册到系统中,Java Service Wrapper(下面简称wrapper)是目前较为流行的将Java程序部署成Windows服务的解决方案, 本文将讨论 ...

  5. Java Service Wrapper 发布Java程序为Windows服务

    下载Windows版本:https://www.krenger.ch/blog/java-service-wrapper-3-5-37-for-windows-x64/ 转自:F:\java\bhGe ...

  6. Java Service Wrapper 发布Java程序或者jar包为Windows服务

    下载Windows版本:http://nchc.dl.sourceforge.net/sourceforge/wrapper/wrapper-windows-x86-32-3.2.3.zip 现在目前 ...

  7. 使用Java Service Wrapper将java程序作为linux服务并且开机自动启动

    以java应用程序为例,打包为tianlong.jar,程序入口为tianlong.QueueTest. 下面在linux的/opt下建立tianlong目录,复制tianlong.jar到/opt/ ...

  8. 使用java service wrapper将java程序注册为window服务

    1.下载java service wrapper 下载地址:http://wrapper.tanukisoftware.com/doc/english/download.jsp 针对自己的需求下载相应 ...

  9. 使用 Java Service Wrapper 启动java后台进程服务

    Java Service Wrapper (http://wrapper.tanukisoftware.com/doc/english/product-overview.html)可以很方便得在各个平 ...

随机推荐

  1. Hive删除分区

    Hive删除分区语句: alter table table_name drop if exists partition(dt=30301111)

  2. 【JUnit】Junit命令行执行、参数化执行、Main方法执行

    参考资料: main方法执行:http://stackoverflow.com/questions/2543912/how-do-i-run-junit-tests-from-inside-my-ja ...

  3. DataSet之增删改查操作(DataGridView绑定)

    DataSet数据集,数据缓存在客户端内存中,支持断开式连接.DataGridView控件绑定DataSet时,它自动的改变的DS的行的状态,而且在做增删改查的时候,可以借助SqlCommandBui ...

  4. Linux学习笔记 (三)Vi文本编辑器

    vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相 ...

  5. python 奇技淫巧

    列表内部的字典的value进行排序 li = [{a:1,b:2,c:3,d:4},{e:5,f:6,g:7,h:8}] li = [{"day":2},{"day&qu ...

  6. TCP/IP详解 卷一(第十七章 TCP:传输控制协议)

    与UDP协议相比,TCP提供一种面向连接的.可靠的字节流服务. TCP首部 跟UDP一样,TCP数据被封装在一个IP数据报中,下面显示TCP的首部数据格式 每个TCP段都包含源端和目的端的端口号,用于 ...

  7. iOS仿支付宝首页效果

    代码地址如下:http://www.demodashi.com/demo/12776.html 首先看一下效果 状态栏红色是因为使用手机录屏的原因. 1.问题分析 1.导航栏A有两组控件,随着tabl ...

  8. git个人使用总结(界面版)

    最近开始使用GIT来管理测试文档,从0到1开始使用git 1.首先,使用网页登录GIT后,创建项目 2.创建项目后,需要配置一下访问者权限 3.然后在网页版GIT复制地址,git clone到 本地 ...

  9. 并发编程概述 委托(delegate) 事件(event) .net core 2.0 event bus 一个简单的基于内存事件总线实现 .net core 基于NPOI 的excel导出类,支持自定义导出哪些字段 基于Ace Admin 的菜单栏实现 第五节:SignalR大杂烩(与MVC融合、全局的几个配置、跨域的应用、C/S程序充当Client和Server)

    并发编程概述   前言 说实话,在我软件开发的头两年几乎不考虑并发编程,请求与响应把业务逻辑尽快完成一个星期的任务能两天完成绝不拖三天(剩下时间各种浪),根本不会考虑性能问题(能接受范围内).但随着工 ...

  10. 用Scratch2.0源码定制一个自己的编辑器

    用Scratch2.0源码定制一个自己的编辑器,换成自己的软件名称和图标,添加中文字体,修复汉化错误等等1.准备:下载Scratch2.0源码.安装开发工具Adobe Flash Builder4.7 ...