美文网首页
window下使用javaservice打包jar成为系统服务

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

作者: 有时右逝 | 来源:发表于2017-11-14 16:42 被阅读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 成服务的步骤

    • 准备好jar包。这里不做过多解释。这里提供下我的pom.xml中build配置。
    <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
    • 拷贝target进入 D:\Program Files\lightai-net

    • 下载 javaservice文件。 http://download.forge.ow2.org/javaservice/JavaService_2_0_10-amd64.zip
      解压之后,拷贝javaservice.exed:programfiles\lightai-net
      此时的文件夹如下:

      image.png
    • 在当前文件夹 打开命令窗口。按住shift,点击鼠标右键,选择在此处打开命令窗口
      执行如下命令

    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
    • 查看服务。
      通过 控制面板 进入 管理工具 再进入服务 即可查看我们的新增的服务
      image.png

    吐槽

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

    相关文章

      网友评论

          本文标题:window下使用javaservice打包jar成为系统服务

          本文链接:https://www.haomeiwen.com/subject/berfvxtx.html