1. 程式人生 > >詳解Maven項目利用java service wrapper將Java程序生成Windows服務

詳解Maven項目利用java service wrapper將Java程序生成Windows服務

XML mac linear font english resources mat 必須 parameter

在項目的開發中,有時候需要將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

[html] view plain copy
  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服務