利用 javaService 发布服务(jar包)

jar在java中作为一种项目的发布形式比较普遍,往往为了容易管理更需要作为一种系统服务发布——起码服务器重启了不用人工去重新打开你所以往运行的jar文件。

 

这里简单的介绍下怎么将jar发布到winNT平台服务上,有以下几个准备工作和注意的问题。

 

首先:

我们需要哪些东西?

1.你所需要运行的jar包,以及它所依赖的第三方包;

2.javaService.exe,这个可以到网上方便下载到,注意:32位的操作系统和64位的需要不同的javaService.exe;

 

有了以上东西我们就可以开始发布服务了,然后我们将这些东西整理到一个文件夹下,例如:我将它们全部放到d:/sewinntserver文件夹下面,如图:

利用 javaService 发布服务(jar包)_第1张图片

红色框中的文件是待会使用javaService名称生成的,在不需要理会。

 

然后,就是运行javaService命令发布服务了!

利用 javaService 发布服务(jar包)_第2张图片

 

说明:

1. -install SE : 是你要发布服务的名称;

2. 你系统环境中设置JAVA_HOME,指定你所需要使用的jre;

3. 在-Djava.class.path中指定你需要运行的jar,这里有个需要注意的地方后面会提到;

4. 设置jvm的基本参数,主要就是内存的分配;

5. 指定信息文件和异常文件,及路径;

 

运行命令后,如果出现...successfully installed, 就ok了,去查看下我们的服务。

 

 

 

这里可以对我们的服务进行管理。

 

 

//------------------------------------------------------------------------------------

 

如果你会打jar包,并且项目中没有一些诡异的情况,像上面一样发布服务应该没有问题,但是...

如果遇到问题,你必须关注一下问题:

 

1.怎么打jar包?

如果你的工程稍微大一点,引用了第三方jar包,那么建议使用MyEclipse进行打包——这的确是个懒人的做法,因为它很简单。

--选择工程 -- export

利用 javaService 发布服务(jar包)_第3张图片

 

选择 Runnable JAR file,Next :

利用 javaService 发布服务(jar包)_第4张图片

 

选择存储路径,以及打包的方式。

这里提供三种方式,简单的理解:第一种方式将第三方jar包会“打散”和你的工程混在一起;第二种方式将第三方jar包完整的保存在你的jar包中,用配置文件调用;第三种方式不会将第三方jar打到你的jar包中,只是用配置文件去应用。

建议使用第一种方式打包!!!

Finish结束!

 

 

2.log4j的异常,不能正确引用。

错误代码:(这些都可以从我们配置的err.txt中找到!!!)

java.lang.NoClassDefFoundError: org/apache/log4j/Logger at com.baitengsoft.FTDB.Socket.server.FTManage_Server.<clinit>(FTManage_Server.java:31) Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) ... 1 more

我当时采用了第二种方式打包,因为打出来的jar包很整洁,但是在发布服务时遇到log4j不能正确引用的问题,后来换成第一种方式打包就没有问题了。这个问题比较诡异!

 

 

3.jdbc driver 不能正确启用的问题

错误代码:

java.lang.SecurityException: invalid SHA1 signature file digest for com/microsoft/sqlserver/jdbc/SQLServerException.class at sun.security.util.SignatureFileVerifier.verifySection(SignatureFileVerifier.java:438) at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:231) at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:176) at java.util.jar.JarVerifier.processEntry(JarVerifier.java:277) at java.util.jar.JarVerifier.update(JarVerifier.java:188) at java.util.jar.JarFile.initializeVerifier(JarFile.java:321) at java.util.jar.JarFile.getInputStream(JarFile.java:386) at sun.misc.URLClassPath$JarLoader$2.getInputStream(URLClassPath.java:689) at sun.misc.Resource.cachedInputStream(Resource.java:59) at sun.misc.Resource.getByteBuffer(Resource.java:154) at java.net.URLClassLoader.defineClass(URLClassLoader.java:249) at java.net.URLClassLoader.access$000(URLClassLoader.java:56) at java.net.URLClassLoader$1.run(URLClassLoader.java:195) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)

这个问题上面稍微提过一下,如果将jdbc驱动包打入到你的jar包中往往会出现这个问题。

对了,这里是指sql Server jdbc driver,其他的没有试验过!

怎么解决这个问题呢?

第一:不要将jdbc驱动程序打入到你的jar中;

第二:将jdbc驱动单独拿出来和你的jar包放在一起,从上面的文件夹中可以看出...;

第三:在javaService命令中将jdbc jar包引入。

经过这样处理就ok了!

 

4.服务怎么卸载?

利用 javaService 发布服务(jar包)_第5张图片

 

这个简单!

 

5.还是有问题?

注意你服务器和javaservice是否兼容!

 

 

 

//---------------------------------------------------------------------------------

 

如果你碰到其他诡异的问题,请留言!!!

 

 

 

 

 

 

 

 

你可能感兴趣的:(sql,log4j,MyEclipse,jdbc,server,服务器,jar)