基础知识
使用Java Service Wrapper将Java程序发布成Windows Service作者: 周建东 日期: 2010-10-29 11:28Java Service Wrapper是一个可以将Java程序发布成Windows服务的工具,功能类似于JDK自带的Java Service不过更强大,而且支持Windows Server 2008等更多的操作系统。 主要参考资料: http://www./woxingwosu/archive/2007/11/28/163308.html http://topic.csdn.net/t/20060717/22/4886513.html
1. 准备工具首先下载Java Service Wrapper的Windows版本,地址:http:///projects/wrapper/files/ 目前sourceforge发布的最新版本是3.3.0,而官网http://wrapper.上社区版的最新版本是3.4.0
2. 准备代码要使用Java Service Wrapper,自己原有的程序必须进行一次改造或者添加一个包装类。这里使用一个最简单的HelloWorld类作为示例。 package com.yjw;
import javax.swing.JFrame; import javax.swing.JLabel;
import org.tanukisoftware.wrapper.WrapperListener; import org.tanukisoftware.wrapper.WrapperManager;
// 实现WrapperListener接口 public class HelloWorld implements WrapperListener{ private static void createAndShowGUI() { JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("HelloWorldSwing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel label = new JLabel("Hello World"); frame.getContentPane().add(label);
frame.setSize(150, 100); frame.setVisible(true); }
public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); //这里,启动HelloWold WrapperManager.start( new HelloWorld(), args ); } //需要一个start方法 public Integer start(String[] args) { System.out.println("start()");
try { System.out.println("HelloWorld!"); } catch (Exception e) { } return null; } //需要一个stop方法 public int stop(int exitCode) { System.out.println("stop(" + exitCode + ")"); return exitCode; } //需要一个controlEvent方法 public void controlEvent(int event) { System.out.println("controlEvent(" + event + ")"); }
}
这里,直接把入口类进行了代码改造,用户也可以单独写一个包装类,把上面带注释的四个地方的代码提取出来,对自己原来的入口类进行包装。
注意:如果没有对入口类进行java wrapper service需要的代码改造,则在做成服务后,表现为JVM试图不停地启动服务,查看wrapper.log,会发现类似如下的报错: INFO | wrapper | 2010/04/16 21:24:58 | Waiting to start...
将HelloWorld.java打成HelloWorld.jar。
3. 实现服务1) 准备工作区 准备一个工作文件夹,例如test,在test下新建conf,log,lib三个文件夹
2) 将下载下来的java wrapper service解压缩 a) 将Java Service Wrapper包中bin下的wrapper.exe拷贝至test下 b) 将Java Service Wrapper包中src/bin下的App.bat.in(测试运行),InstallApp-NT.bat.in(安装windows服务),UninstallApp-NT.bat.in(卸载windows服务)拷贝至test下,并且将后缀.in去掉 c) 修改App.bat,InstallApp-NT.bat,UninstallApp-NT.bat中的set _WRAPPER_CONF="%_REALPATH%conf\wrapper.conf" d) 将conf文件夹下的wrapper.conf拷贝至test/conf下 e) 将Java Service Wrapper包中lib下的Wrapper.DLL,wrapper.jar拷贝至test/lib下
3) 准备可用jar包 HelloWorld.jar此时还不能直接使用,需要进行改造 a) 将HelloWorld.jar解压缩,提取META-INF/MANIFEST.MF文件 b) 打开MANIFEST.MF,在Class-Path中追加wrapper.jar wrapper.dll c) 将HelloWorld.jar和改造过的MANIFEST.MF一起拷贝到%JAVA_HOME%/bin下 d) 打开cmd窗口,将路径切换至%JAVA_HOME%/bin e) 输入命令jar umf MANIFEST.MF HelloWorld.jar,此时HelloWorld.jar中的MANIFEST.MF已被更新为当前的MANIFEST.MF f) 将更新后的HelloWorld.jar拷贝至test/lib下
4) 配置wrapper.conf 打开test/conf/wrapper.conf
#程序的入口 wrapper.java.mainclass=com.yjw.HelloWorld
#程序jar,包括wrapper.jar wrapper.java.classpath.1=lib/HelloWorld.jar wrapper.java.classpath.2=lib/wrapper.jar
#程序的文件夹,这里为lib wrapper.java.library.path.1=lib
#注意:有的教程注释为程序的入口,虽然能够正常运行,但是这是概念性错误! #这个参数指传给主程序的参数入口,比如笔者有个程序,传值0表示为英文版,1为中文版,参数就在这里配置。如果有多个参数,请自行配置 #为wrapper.app.parameter.n=XXX wrapper.app.parameter.1=1
#日志文件生成的位置 wrapper.logfile=log/wrapper.log
#windows服务所需的标题,名称,显示名和描述
5) 运行App.bat,如果没有错误出现,说明配置正常,就可以运行InstallApp-NT.bat将你的程序做成Windows服务了。所有信息都可以在log/wrapper.log日志文件里找到
6) 如果要打开调试信息,在test/conf/wrapper.conf中将wrapper.debug=TRUE前面的#号去掉即可打开调试功能 引用通告地址: http://tmsoft./trackback.php?tbID=929&extra=620ae8
|
|