当Maven工程中,有许多依赖jar包时,打成可执行jar时需要将这些依赖包一起打包。
1、在pom.xml文件的build节点中添加resources节点
<resources>
<!-- 控制资源文件的拷贝 -->
<resource>
<directory>src/main/resources</directory>
<targetPath>${project.build.directory}/classes</targetPath>
</resource>
</resources>
2、在pom.xml文件中的plugins节点中添加maven-compiler-plugin、maven-jar-plugin打包框架
<!-- The configuration of maven-jar-plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<!-- The configuration of the plugin -->
<configuration>
<!-- Configuration of the archiver -->
<archive>
<!-- 生成的jar中,不要包含pom.xml和pom.properties这两个文件 -->
<addMavenDescriptor>false</addMavenDescriptor>
<!-- Manifest specific configuration -->
<manifest>
<!-- 是否要把第三方jar放到manifest的classpath中 -->
<addClasspath>true</addClasspath>
<!-- 生成的manifest中classpath的前缀,因为要把第三方jar放到lib目录下,所以classpath的前缀是lib/ -->
<classpathPrefix>lib/</classpathPrefix>
<!-- 应用的main class -->
<mainClass>com.sc.test.ApiTest</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<!-- The configuration of maven-assembly-plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<!-- The configuration of the plugin -->
<configuration>
<!-- Specifies the configuration file of the assembly plugin -->
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
3、在project节点内部设置文件编码,用于解决工程导入的乱码问题
<properties>
<!-- 文件拷贝时的编码 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- 编译时的编码 -->
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
</properties>
4、在项目 src/main文件夹下,创建assembly文件夹,在该文件夹下新增assembly.xml文件。
<assembly>
<id>bin</id>
<includeBaseDirectory>false</includeBaseDirectory>
<!-- 最终打包成一个用于发布的zip文件 -->
<formats>
<format>zip</format>
</formats>
<!-- Adds dependencies to zip package under lib directory -->
<dependencySets>
<dependencySet>
<!--
不使用项目的artifact,第三方jar不要解压,打包进zip文件的lib目录
-->
<useProjectArtifact>false</useProjectArtifact>
<!--<outputDirectory>lib</outputDirectory>-->
<unpack>false</unpack>
</dependencySet>
</dependencySets>
<fileSets>
<!-- 把项目相关的说明文件,打包进zip文件的根目录 -->
<!--<fileSet>-->
<!--<directory>${project.basedir}</directory>-->
<!--<outputDirectory>/</outputDirectory>-->
<!--</fileSet>-->
<!-- 把项目的配置文件,打包进zip文件的config目录 -->
<fileSet>
<directory>${deploy.dir}/classes/</directory>
<outputDirectory>/conf</outputDirectory>
<includes>
<include>*.xml</include>
<include>*.properties</include>
</includes>
</fileSet>
<!-- 把项目自己编译出来的jar文件,打包进zip文件的根目录 -->
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory></outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
</fileSets>
</assembly>
5、执行命令:mvn clean package,项目生成文件夹
6、解压target文件夹下****-1.0-SNAPSHOT-bin.zip到 lib文件夹
7、在lib同级文件夹下新增data文件夹,将项目中用到的文件放入data中。
注意:文件夹命名为data,是因为项目中用到的文件就在data下。
8、将lib文件夹、data文件夹,**-1.0-SNAPSHOT.jar放在同一个目录下。
9、cmd,进入该文件夹中,输入 java -jar -1.0-SNAPSHOT.jar,执行*-1.0-SNAPSHOT.jar,即可。