maven打包jar文件大问题。解决记录
1、修改pom.xml,打包jar包的时候排除lib
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!-- lib依赖包输出目录,打包的时候不打进jar包里 -->
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<excludeTransitive>false</excludeTransitive>
<stripVersion>false</stripVersion>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
<!-- 压缩jar包,打出来的jar中没有了lib文件夹 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<layout>ZIP</layout>
<includes>
<include>
<groupId>nothing</groupId>
<artifactId>nothing</artifactId>
</include>
</includes>
</configuration>
</plugin>
2、使用maven打包后会有lib包脱离出来
3、更新启动命令
java -Dloader.path="lib包的路径(相对和绝对都可以)" -jar ***.jar
4、使用WinSw部署成服务 由于 lib是外部映入的,我注册启动一直不成功就直接使用 bat文件的方式启动 使用相对路径和绝对路径都可以
下载地址
Releases · winsw/winsw · GitHub
4.1、配置启动命令bat文件 (这个文件的路径对应的WinSw.xml中的 executable)
java -Dfile.encoding=UTF-8 -Dloader.path=C:\***\lib -jar C:\***-0.0.1-SNAPSHOT.jar
pause
4、2配置WinSw.xml文件
<!--
命令说明:
WinSW-x64.exe install 安装服务
WinSW-x64.exe uninstall 卸载服务
WinSW-x64.exe start 开启服务
WinSW-x64.exe stop 停止服务
WinSW-x64.exe restart 重新启动服务
WinSW-x64.exe status 检查服务的当前状态
-->
<service>
<!-- 指定Windows内部用于标识服务的ID。这在系统中安装的所有服务中必须是唯一的,并且应完全由字母数字字符组成 -->
<id>***_9000</id>
<!-- 此元素指定要启动的可执行文件。它可以是绝对路径,也可以只指定可执行文件名称并从中搜索PATH(尽管请注意,服务通常以不同的用户帐户运行,因此它可能与PATHShell有所不同。) -->
<!-- <executable>java </executable>-->
<!--<startarguments> -Dfile.encoding=UTF-8 -Dloader.path=C:\**\lib - C:\***.jar</startarguments>-->
<!-- 由于 lib是外部映入的,我注册启动一直不成功就直接使用 bat文件的方式启动
使用相对路径和绝对路径都可以
-->
<executable>C:\***.bat </executable>
<!-- 可选服务的 简短显示名称,可以包含空格和其他字符。它不应太长,例如<id>,并且在给定系统的所有服务中也必须是唯一的 -->
<name>***_9000</name>
<!-- 可选服务的可读描述。选择该服务后,它将显示在Windows服务管理器中。 -->
<description>(***_9000)</description>
<!-- 可选的可重复元素控制了winsw启动的进程失败后的行为(例如,执行带有非零退出码的退出操作) -->
<!-- 延迟属性的可能后缀是sec/secs/min/mins/hours/day/days。如果未设置,延迟属性默认为0 -->
<onfailure action="restart" delay="20 sec"/>
<!-- 控制了Windows SCM重新设置故障计数的时间 -->
<resetfailure>8 hour</resetfailure>
<!--
OPTION: priority
Desired process priority.
在较低的优先级上启动一个进程,以避免干扰计算机的交互使用
Possible values: Normal, Idle, High, RealTime, BelowNormal, AboveNormal
Default value: Normal
-->
<priority>Normal</priority>
<!--
OPTION: stoptimeout
当服务被要求停止时,winsw首先尝试调用GenerateConsoleCtrlEvent 方法(类似于Ctrl+C),然后等待长达15秒的时间,让进程自行退出
如果这样做了,进程关闭还是失败了(或者如果进程没有控制台),
然后winsw会调用终止进程的API函数来立即终止服务。
Default value: 15 seconds
-->
<stoptimeout>15 sec</stoptimeout>
<!--
OPTION: startmode
该元素指定Windows服务的启动模式。它可以是下列值之一:开机、系统、自动或手动
Supported modes: Automatic, Manual, Boot, System (latter ones are supported for driver services only)
Default mode: Automatic
-->
<startmode>Automatic</startmode>
<!--
OPTION: logpath
设置日志存放目录
Sets a custom logging directory for all logs being produced by the service wrapper
Default value: Directory, which contains the executor
-->
<logpath>%BASE%\log\</logpath>
</service>
4.3 执行 WinSW-x64.exe install 安装服务 和WinSW-x64.exe start 开启服务 就可以了