docker容器——springboot项目发布成jar包

# springboot项目打jar包

对于打jar包运行,我一开始以为只要使用ide的导出功能,导出为可执行的jar包文件就行了,但是实际上,却出现了似乎解决不了的问题。

使用的ide是spring tool suit,导出的jar在java -jar命令运行时,报错提示:没有主属性清单
对于这个错误,其实网上的解决方法已经很有很多了,我这里只是列举下原因和应该有效的解决方法:
这个问题99%的情况下是所打jar包里面的 “MANIFEST” 文件问题,这个文件是程序运行时,需要去扫描并根据里面的配置确定运行入口类是哪个以及依赖的类是哪些的文件

  • 文件中Main-Class属性没有,或格式有误,比如我通过ide导出可执行的jar就是没有这个属性,而网上的一些问题还集中在写法:Main-Class: xxx , 冒号后面应该有空格,且需要换行到下一行

    解决办法:
    1.在jar包的格式下,通过解压缩文件打开jar包,手动添加修改Main-Class属性值
    2.或换一种导出jar包方式,例如使用maven导出jar包,配置如下:
      (1) pom文件配置如下,第一部分制定过滤掉打包时的测试检查环节,第二部分手动指定程序运行的入口程序
    代码pom文件截图描述
      (2) maven打jar包方式:
        选中项目右键debug as-debug configurations,然后如图所配:
    打jar包配置方式
        注意修改编码方式为:utf-8即与你代码文件编码方式相同,否则打包会通不过
    编码方式
        然后如下图找到刚才配置的东西,我命名的名字是:campus,找到它,点击运行打包就行了:
    选择配置好的东西

  • 一般情况下,上面一套流程下来,基本就能完好无损的导出jar包了,并且在windows命令行,通过java -jar就行正常运行了。但是,我遇到的是以下的情况:

    • jar包本身因为某些原因而被损坏:由于我是在阿里云上布项目,因此我从本地将项目通过xftp上传到阿里云,因为一般打出的jar包都带版本号,如:0.0.1-SNAPSHOT类似,为了方便统一名字,我自己把这部分名字干掉了,导致文件受到了损坏,后面再通过docker制作出来的景象就一直运行不起来,始终报"找不到主属性清单",因此,我认为上传的jar一般最好不要对本身做任何修改,直接用就行了
    • 另一方面,对于这种上传到linux上面的情况,我在查资料时,找到别人确定的另一种损坏的原因,由于上传软件,如:xftp的上传编码不对,导致上传后文件损坏,这些都需要注意一下,避免不必要的损失

# docker制作镜像并运行项目

安装docker的流程就不讲了,网上教程一大堆,直接从把jar包制作成镜像开始:

  • 编写Dockerfile文件:
    我是以java 8作为基础镜像,便省去了在宿主机上装jdk的功夫
From java:8
ADD CampusWebSite-0.0.1-SNAPSHOT.jar campus.jar
RUN bash -c 'touch /campus.jar'
ENTRYPOINT ["java","-jar","/campus.jar"]
  • 运行docker命令创建镜像:
docker build -t 镜像名
  • 创建并运行容器 镜像:
    -d: 后台运行
    -p: 指定访问端口映射到容易端口,这里指定访问端口为8090,映射到容器的8080
docker run -d -p 8090:8080 镜像名
  • 至此,一个jar基本上就运行起来了
  • 当然,这里是需要数据库的支持的,不然项目运行时,会因为连接不上数据库而报错,使得启动不成功。我在这里直接又在对docker的仓库里面pull下来mysql的镜像,作为容器运行起来,然后在项目jar包里,写死该mysql容器的IP,然后就可以访问了,当然,这个写死的方法是很不好的,暂时练习用就暂时这样了,以后再改
  • 在运行mysql的过程中,遇到了远程连接数据库权限方面的问题,这里就不多说了,找到了一篇很好的解释很全面的文章,由于不能转载的原因,直接介绍该博客名:海鸥花开,那篇文章名:《Navicat 远程连接Docker容器中的mysql 报错:1251 - Client does not support authentication protocol 解决办法。》

以上就是我发布springboot jarb包项目的基本过程,也是遇见坑,解决坑的一个大致过程,其中上传jar到linux,然后改了jar包名字导致jar损坏这个坑,简直让自己无语,以此谨记。

以上过程只是大致过程,详细的技术细节和深度的学习,留待个人继续的学习吧

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值