SpringBoot+Maven打可运行的JAR包(将lib包单独放在jar外面)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

最近在学习使用SpringBoot+Docker,租用的腾讯云服务器环境已经弄好了,就差把项目打好后的jar包放上去,然后生成镜像了,无奈使用mvn package打出来的jar运行时出现了2个问题:

1、no main manifest attribute(找不到程序入口,即未指定main方法所在类)

2、找不到运行依赖的jar包,如SpringBoot启动使用的SpringApplication类

查阅资料并自己试验之后,得出解决以上2个问题的一个综合方案。

 

第一步,在pom.xml中添加插件maven-jar-plugin,并配置入口程序的地址


  org.apache.maven.plugins
  maven-jar-plugin
  
    
      
        
        true
        
        com.eya.SpringBootStarter
        lib/
      
    
  

第二步,使用以下maven命令打包。

mvn clean dependency:copy-dependencies  -DoutputDirectory=target/lib package

说明一下,这里的dependency:copy-dependencies  -DoutputDirectory=target/lib是将程序依赖的jar包拷贝到target/lib目录里去,这也是解决问题的关键步骤。

打包之后,target中的内容如下图

SpringBoot+Maven打可运行的JAR包(将lib包单独放在jar外面)_第1张图片

关键的就是这里多了一个lib包,里面放的是springboot-swagger.jar运行所需要依赖的jar包。为什么lib包一定要放在这里才行?我们可以使用压缩工具打开springboot-swagger.jar,查看META-INF目录下的MANIFEST.MF文件内容(如下图所示),依赖的jar包都是放在了classpath/lib包下,这和maven-jar-plugin中的配置(classpathPrefix)是对应起来的。

SpringBoot+Maven打可运行的JAR包(将lib包单独放在jar外面)_第2张图片

进入target目录,使用java -jar springboot-swagger.jar启动springboot应用即可。

SpringBoot+Maven打可运行的JAR包(将lib包单独放在jar外面)_第3张图片

浏览器访问一下试试是否真的启动成功:

SpringBoot+Maven打可运行的JAR包(将lib包单独放在jar外面)_第4张图片

 

写完这篇文章之后,反复思考,觉得不应该这么复杂,后又仔细检查了配置,在我的pom.xml中,spring-boot-maven-plugin插件被放在了pluginManagement标签内,所以没有生效,才引入了问题,去掉pluginManagement之后,直接使用spring-boot-maven-plugin插件打包,就没有博文中提到的各类问题了,也变得很简单了,直接mvn clean package即可打出可运行的jar包。

友情提示:使用博文中提到的方法,可以针对非springboot项目来打可运行的jar包

 

转载于:https://my.oschina.net/simpleton/blog/2249379

你可能感兴趣的:(java,开发工具,python)