当前位置:   article > 正文

【填坑向】我可能也就是踩了dockrfile部署jar包(需读取resource目录下的文件)全部的坑吧。。。_could not find the main class org.springframework.

could not find the main class org.springframework.boot.loader

FileNotFoundException。。没错、这篇还是从读取的文件找不到的问题开始,今天来个终极版( ̄∇ ̄)/

一开始我把要读取的文件放在了项目根路径,package就没把它打进去,显然是找不到的,于是我把这个JSON文件移到了resources中

此时可以看到,这个文件也打进了target中,这部分可以参考

【填坑向】Linux获取Java程序resource下的文件路径(这次的坑好像没填住……

之前的一篇的文章,那里有记录过获取路径失败的原因,这里就不重复赘述叻

今天这篇是有新发现!算是填上一篇文章的坑( ̄∇ ̄)/

在官网上了解到可以通过解包的方式,来读取jar包中的内容

官方地址:https://docs.spring.io/spring-boot/docs/2.3.12.RELEASE/reference/html/deployment.html#deployment

于是在本地的终端中对打好的jar包依次执行了这两行命令,运行无比顺滑然后我就也在Dockerfile中加了如下红框框内的两行

CMD ["jar","-xf","my-1.0.0-SNAPSHOT.jar"] CMD ["java","org.springframework.boot.loader.JarLauncher"]

推到服务器上。。。就是=[,,_,,]:3哭死在阿里云。。。

报找不到org.springframework.boot.loader.JarLauncher

找不到org.springframework.boot.loader.JarLauncher

最初单纯的俺一直觉得是没有填对路径,于是按照各种文章尝试:比如切换WORKDIR,改绝对路径、改相对路径。。。

服务器日志都是坚持告诉我:Could not find the main class: org.springframework.boot.loader.JarLauncher

即将哭死的我一不小心从旁边大佬处得知CMD指令只有最后一个有效。。。

WHAT?! RUN、CMD 和 ENTRYPOINT 指令都可以用来执行具体的命令RUN 指令是在 Docker 镜像构建时发挥作用, 可以使用多个该命令,且执行结果会记录到镜像中CMD 和 ENTYPOINT 指令是在容器启动时自动执行,均只有最后一个该指令有效,且均可以在 docker run 中被覆盖ENTRYPOINT 指令和 CMD 的区别在于使用 ENTRYPOINT 时 CMD 指令会被作为其默认参数,而用户也可以在启动容器时通过覆盖 CMD 指令来输入参数;此外, 这也意味着 ENTRYPOINT 指令的内容不易被用户命令覆盖。

好吧(谁让我不好好学docker=[,,_,,]:3)

怪不得看到很多案例使都是使用entrypoint.sh文件来执行多条脚本的,俺也来!

于是我在Dockerfile同级目录下新建了一个entrypoint.sh文件,把多条命令写在这个文件中

在Dockerfile中添加执行这个脚本的代码

ENTRYPOINT ["/app/docker/entrypoint.sh"]

又是一顿找不到。。。

no such file or directory

我们先来分析下这个异常记录

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/284127
推荐阅读
相关标签