maven打可执行jar包pom配置如下:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<!--包含文件夹以及子文件夹下所有资源-->
<include>**/*.*</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<!-- 指明编译源代码时使用的字符编码,
maven编译的时候默认使用的GBK编码,
通过encoding属性设置字符编码,
告诉maven这个项目使用UTF-8来编译 -->
<encoding>utf8</encoding>
</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>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.thizgroup.main.MainClass</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.thizgroup.main.MainClass</mainClass> <!-- 此处为主入口-->
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
把这段配置复制到项目的pom文件中,需要修改mainClass的包路径,然后执行mvn clean package -Dmaven.test.skip=true
打包,
打包,在命令行窗口运行jar,
java -jar .\tank-01-1.0-SNAPSHOT.jar
运行可能会出现配置文件或者其他资源文件找不到的情况,比如,
Exception in thread "main" java.lang.ExceptionInInitializerError
at com.mashibing.tank.TankFrame.<clinit>(TankFrame.java:19)
at com.mashibing.tank.Main.main(Main.java:6)
Caused by: java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Unknown Source)
at java.util.Properties.load0(Unknown Source)
at java.util.Properties.load(Unknown Source)
at com.mashibing.tank.PropertyMgr.<clinit>(PropertyMgr.java:18)
... 2 more
原因可能是打包没有把这个资源文件打进去,使用压缩工具打开jar包看看里面是不是存在这个资源文件,如果不存在则考虑打包的资源文件配置有问题,修改resources的配置后重新打包即可
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<!--包含文件夹以及子文件夹下所有资源-->
<include>**/*.*</include>
</includes>
</resource>
</resources>