我们再eclipse上新建一个java工程,然后想要打包为可执行的jar,也就是可以直接java -jar xxxx.jar 命令执行的程序。有如下方法。
1、maven项目
如果只是一个普通的maven项目,而不是springboot,那么可以在pom.xml的build标签加入如下内容即可:
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.4</version>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
<executions>
<execution>
<!-- 执行package的phase -->
<phase>package</phase>
<!-- 为这个phase绑定goal -->
<goals>
<goal>shade</goal>
</goals>
<configuration>
<!-- 过滤掉以下文件,不打包 :解决包重复引用导致的打包错误-->
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<!-- 打成可执行的jar包 的主方法入口-->
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.gdpost.App</mainClass>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<defaultGoal>compile</defaultGoal>
当然需要修改主方法入口,然后maven build 输入package即可。
2、SpringBoot项目
这个简单,只要在build中加入如下内容,然后maven install或者package即可
<finalName>suibibk</finalName>
<plugins>
<!-- 可以将项目打包成可执行jar包 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
当然不一定非得叫做suibibk。
3、普通java项目
假如既不是maven项目,也不是web项目,而是普通java项目。可以直接用eclipse的Export功能导出可执行jar.
会导出成一个文件夹, 若没有第三方jar包,则导出后就可以直接java -jar jarfile 运行了,
但是当有第三方jar的时候,此时用winrar解压查看文件,以及导出来的清单如下:
执行就会报如下错误:
仿佛是不能够加载第三方的jar包,导致不能解析一些名称。
然后选择第二种导出:
此时用winrar解压查看文件,以及导出来的清单如下:
分析可以发现,就是MAINIFEST.MF的内容不同,若是想要合并为同一个文件夹,应该只需要对第二种进行想要的修改,将lib放入jar包即可,但是为了方便以后维护,只需要上传jar不需要上传lib,那么这个程序应该要选择第二种方式导出。
4、用Fat jar打包
这个插件还是很好用的,可以把第三方jar也打包进入一个jar中。
我用的是上面的第二种,jar和lib分离的方法