window下使用javaservice打包jar成为系统服务

2017-11-14  本文已影响0人  有时右逝

前言

目前在公司负责开发一个网络模块,该模块常驻内存,监听某个端口进行通信。初期使用的时java -jar xxx.jar 命令运行。每次都需要登录远程服务器,打开cmd,输入上面的命令。由于无线网络缓慢,远程桌面卡顿,导致每天耗费大量时间,作为一个技术人员,自然需要改变这样的情况,于是这里使用了jenkins进行自动部署,其中就遇到一个需求,需要将jar打包成系统服务,方便自动部署后进行服务重启。

系统环境

image.png

我的使用场景

  1. 配置好pom.xml
  2. 提交代码到码云
  3. 触发jenkins的构建,产生target文件夹,
  4. jenkins执行批处理,拷贝target文件到D:\Program Files\lightai-net 关闭服务,再启动服务.

从而实现该网络模块的自动化部署。

构建完成之后的脚本如下


image.png

打包jar 成服务的步骤

<build>
        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>com.insigmaunited.lightai.main.LightaiServer</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

其中
<mainClass>com.insigmaunited.lightai.main.LightaiServer</mainClass> 需要修改你自己的入口类。

在项目的目录下执行 mvn clean package 即可产生文件夹 target如果配置了jenkis构建,则该命令是jenkins完成

image.png
JavaService.exe -install lightai-net "%JAVA_HOME%"/jre/bin/server/jvm.dll -Xms500m -Xmx500m -Djava.class.path="%JAVA_HOME%"/lib/tools.jar;"%CD%"/lib;"D:\Program Files\lightai-net\lightai-net-1.0.0.jar";"%CD%"/classes -start com.insigmaunited.lightai.main.LightaiServer -method main -out "D:\Program Files\lightai-net\log.log" -err "D:\Program Files\lightai-net\err.log"

命令的参数解释

  1. -install lightai-net 表示注册的服务名 是 lightai-net
  2. "%JAVA_HOME%"/jre/bin/server/jvm.dll -Xms500m -Xmx500m -Djava.class.path="%JAVA_HOME%"/lib/tools.jar;"%CD%"/lib;"D:\Program Files\lightai-net\lightai-net-1.0.0.jar";"%CD%"/classes 表示jvm路径和classpath路径。 如果你配置和我相同,只需要修改 "D:\Program Files\lightai-net\lightai-net-1.0.0.jar" 为你的jar包。
  3. -start com.insigmaunited.lightai.main.LightaiServer -method main 表示服务启动时执行的入口类和方法。
  4. -out "D:\Program Files\lightai-net\log.log" -err "D:\Program Files\lightai-net\err.log" 表示服务执行中输出到指定文件log.log ,如果出现错误,则输出到err.log

执行命令的结果


image.png

吐槽

这个打包,耗时较多。主要是网络上文章很多,每一个都有一些差异。我直接拷贝无法执行运行。这里建议大家如果首次尝试,最好确保目录我一样。

上一篇 下一篇

猜你喜欢

热点阅读