我们再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><transformerimplementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"><resource>META-INF/spring.handlers</resource></transformer><!-- 打成可执行的jar包 的主方法入口--><transformerimplementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>com.gdpost.App</mainClass></transformer><transformerimplementation="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分离的方法
