在项目的开发中,有时候需要将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. JavaWeb项目实现文件下载

    File file = new File(path);// path是根据日志路径和文件名拼接出来的 String filename = file.getName();// 获取日志文件名称 Inpu ...

  2. account for 与led to和result in的区别

    account for sth:be the explanation of sth; explain the cause of sth 作某事物的解释; 解释某事物的原因:His illness ac ...

  3. 模式识别hw2-------基于matconvnet,用CNN实现人脸图片性别识别

    主要来源模式识别课程大作业,本文首先感谢当初的助教和一起完毕作业的队友 matconvnet在matlab下封装了CNN常见算法,网址http://www.vlfeat.org/matconvnet/ ...

  4. ECSHOP后台开发模块步骤

    一.建数据库二.添加到后台导航栏并配置相关语言包三.权限配置四.添加增删查改五.增加其他功能(复制,搜索(暂时调不出来页面),排序,转移,AJAX) 以添加支付信息模块为例 第一步首先我们用phpmy ...

  5. 转: 由socket的accept说开去

    from: http://ticktick.blog.51cto.com/823160/779866 今天与同学争执一个话题:由于socket的accept函数在有客户端连接的时候产生了新的socke ...

  6. 倍福TwinCAT(贝福Beckhoff)基础教程5.1 TwinCAT-1 获取和设置系统时间

    使用功能块NT_GetTime,NETID填写两个单引号表示本机,START就是一个触发信号,一般的功能块都需要一个上升沿触发执行,最后的输出类型都是让系统自己决定,然后统一把这些变量放到全局变量中( ...

  7. Android学习(十) SQLite 基于SQL语句的操作方式

    main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...

  8. tomcat使用redis存储共享session

    在tomcat集群环境下实现session共享有几种解决方式,这里介绍一种简单的方案. 使用redis对session进行存储,配置比較简单.webserver是tomcat6 1.下载jar包: c ...

  9. 关于汉诺塔,C++代码,代码效果演算

     1.故事介绍 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上依照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘 ...

  10. ASP.NET CORE RAZOR :向 Razor 页面添加验证

    https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/razor-pages/validation 本部分中向 Movie 模型添加了验证逻辑. ...