Docker容器启动时在jar中找不到api-rest的主类
Posted
技术标签:
【中文标题】Docker容器启动时在jar中找不到api-rest的主类【英文标题】:Docker container cannot find the main class of api-rest in jar when launch 【发布时间】:2020-02-05 14:16:26 【问题描述】:我用 gradle 构建了我的 spring-boot api 的 jar,但是在启动 docker 容器后它会自行停止并显示“错误:无法找到或加载主类 com.test.exampleController”
这是一个 Docker 项目
我将此代码插入到我的 build.gradle 中:
task fatJar(type: Jar)
manifest
attributes 'Main-Class': 'com.test.exampleController'
baseName = project.name + '-all'
from configurations.compile.collect it.isDirectory() ? it : zipTree(it)
with jar
我不确定我是否需要在课堂上进行一些注释,或者问题是因为我有 3 个控制器
我希望使用 tha spring-boot api 运行一个 docker 容器,并使用其他应用程序(例如邮递员)对其进行测试
【问题讨论】:
不要编写自己的任务。 gradle spring boot 任务完成了所有这些。所以放弃你的fatJar
任务,只使用spring boot任务(如果你简单地添加插件,它将默认执行)。
我尝试使用 gradle 任务生成 jar 文件,但没有生成任何内容。我按照以下步骤操作: gradle tab --> projectName --> Tasks --> build --> jar 我认为我的 build.gradle 中需要一个 instruccion 缺失,你能给我一个例子吗?感谢您的回复。
好吧,我终于找到了我的 gradle 中缺少的代码:``` jar baseName = 'example-api' version = '0.1.0' ``
应用 spring boot 插件,只需执行 gradle build
即可。它将采用默认值(名称和组)来生成工件。
【参考方案1】:
最后我发现了错误,我尝试使用不正确的启动器构建 jar。在 gradle 选项卡中,我可以找到任务,在 build 内部在其他人之间出现“jar”,这是我的错误,我在想“如果我想要一个 jar,这是我的任务”,但不是,我想要一个 springboot 的 jar,这意味着我需要那个 jar 有主类和启动器。为此,我的任务中存在另一个选项“bootjar”。构建一个定义了主类和启动类的清单文件。辅助图片
【讨论】:
以上是关于Docker容器启动时在jar中找不到api-rest的主类的主要内容,如果未能解决你的问题,请参考以下文章
Docker:OCI 运行时创建失败:container_linux.go:349:启动容器进程导致“exec:\”java\“:$PATH 中找不到可执行文件”