【问题标题】:Docker could not find or load main class in Java spring bootDocker 无法在 Java Spring Boot 中找到或加载主类
【发布时间】:2021-08-09 18:32:34
【问题描述】:

我有一个简单的spring boot server,结构如下:

.
├── Dockerfile
├── HELP.md
├── demo.iml
├── mvnw
├── mvnw.cmd
├── pom.xml
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── example
│   │   │           └── demo
│   │   │               ├── DemoApplication.java
│   │   │               ├── Employee.java
│   │   │               ├── EmployeeResource.java
│   │   │               ├── exceptions
│   │   │               │   └── UserNotFoundException.java
│   │   │               ├── repo
│   │   │               │   └── EmployeeRepo.java
│   │   │               └── service
│   │   │                   ├── DockerFile
│   │   │                   └── EmployeeService.java
│   │   └── resources
│   │       ├── META-INF
│   │       │   └── MANIFEST.MF
│   │       ├── application.properties
│   │       ├── static
│   │       └── templates
│   └── test
│       └── java
│           └── com
│               └── example
│                   └── demo
│                       └── DemoApplicationTests.java
└── target
    ├── classes
    │   ├── META-INF
    │   │   └── MANIFEST.MF
    │   ├── application.properties
    │   └── com
    │       └── example
    │           └── demo
    │               ├── DemoApplication.class
    │               ├── Employee.class
    │               ├── EmployeeResource.class
    │               ├── exceptions
    │               │   └── UserNotFoundException.class
    │               ├── repo
    │               │   └── EmployeeRepo.class
    │               └── service
    │                   └── EmployeeService.class
    ├── demo.jar
    ├── generated-sources
    │   └── annotations
    ├── generated-test-sources
    │   └── test-annotations
    └── test-classes
        └── com
            └── example
                └── demo
                    └── DemoApplicationTests.class

还有我的 Dockerfile:

FROM "ANYONMOUS REPO" as builder
USER root
COPY src /src
ADD target/demo.jar demo.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","demo.jar"]

此服务器在本地运行时工作正常,但是当我创建一个 docker 映像并尝试运行它时,我收到以下错误:

Error: Could not find or load main class com.example.demo.DemoApplication.

我不确定如何在包本身中定位主类,我尝试在我的 Dockerfile 中使用这个命令: CMD java -classpath src/java com.example.demo 试图定位这个包,但我仍然得到同样的错误。有没有不同的方法来定位 Jar 文件和 Docker 中的主类?

【问题讨论】:

  • DemoApplication@SpringBootApplication?
  • 是的!引导服务器通过 intellij 在我的机器上运行良好,没有错误。
  • 尝试从命令行运行它
  • 你如何构建那个 jar?做同样的事。 1) 构建 jar 2) 尝试运行 java -jar demo.jar without docker
  • 我同意@Eugene,你如何在主机上运行它?通过诸如 Eclipse 之类的 IDE?我相信它会为您构建一个可执行的 .jar,您必须自己在 Dockerfile 中完成

标签: java spring spring-boot docker


【解决方案1】:

我遇到了类似的问题。您可以尝试以下方法;

第 1 步:将以下内容添加到您的 pom.xml。

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

第 2 步:清理并构建您的项目。这应该会自动在 META-INF/MANIFEST.MF 中为“Main-Class”指定一个值

mvn clean package spring-boot:repackage

【讨论】:

    猜你喜欢
    • 2021-12-18
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 2014-12-20
    • 2016-05-23
    相关资源
    最近更新 更多