近期项目中做的JAVA小应用程序有些多,但是苦于打包过程比较费劲,主要是因为程序中用了spring和mybatis的依赖,所以打包过程总各种坑,主要还是由于spring一系列配置文件的路径问题,经过各种试错,总算找到一条可行的方法。
1、在MAVEN项目的POM.xml文件中添加以下内容,具体重点的部分都加了注释,自行理解就行。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<!-- 默认值为true.注意这个属性,如果你用这个插件来deploy,或者发布到中央仓库,这个属性会缩减你的pom文件,会把你依赖的<dependency>干掉 -->
<createDependencyReducedPom>false</createDependencyReducedPom>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<!-- 这个是你的程序入口文件 -->
<mainClass>com.zlf.dp.main.App</mainClass>
</transformer>
</transformers>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<finalName>项目名</finalName>
2、使用maven命令进行打包:Mvn clean package 。
----------------------------------------------------打包完成------------------------------------------
打包之后可以正常运行,可是在windows下总会有java执行的dos窗口,所以想着怎么能将其转换为windows的服务,随系统自动启动和运行,不用的时候可以终止服务。
首先,我们知道jar文件的执行命令为 java -jar 程序绝对路径(如d:\bin\jarName.jar) ,而.bat文件是dos下的批处理文件,可以包含一条或多条命令.。
那么我们就可以自建一个.bat文件,然后在里面写入命令java-jar d:\bin\jarName.jar ,然后通过这个bat文件来运行jar 。具体配置方法见下:
1:在jar文件所在目录下新建文本文件 start.txt,编辑内容写入java -jar d:\bin\jarName.jar 保存。重命名文件将.txt改为.bat
2:下载 instsrv.exe(注册服务用的工具)和srvany.exe(可以把这个看成是一个用来存放服务的外壳)
3:打开cmd输入命令 d:\mytools\instsrv.exe服务名 d:\mytools\srvany.exe
4:regedit打开注册表
5:进入HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/服务名
6:右键-新建-项 填入 Parameters
7:打开Parameters,右键-新建-字符串值 Application
8:双击Application 填入应用程序的绝对路径,如:d:\bin\start.bat
9:右键-新建-字符串值AppDirectory
10:双击AppDirectory 填入应用程序的工作目录,如:d:\bin
经过亲测可用。