Cen*_*asa 5 java maven docker spring-boot
我正在尝试 dockerize 一个使用 Maven 构建的简单 Spring Boot 应用程序。
Dockerfile:
FROM openjdk:latest
COPY target/backend-1.0-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","app.jar"]
Run Code Online (Sandbox Code Playgroud)
当我在没有容器 ( ) 的情况下运行 .jar 时java -jar target/backend-1.0-SNAPSHOT.jar,一切正常并且应用程序正在运行。
现在我用以下命令创建容器docker build -t company/backend .
但是当我尝试运行 docker 容器时,docker run -p 8080:8080 company/backend出现以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication
at de.company.backend.Application.main(Application.java:10)
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 1 more
Run Code Online (Sandbox Code Playgroud)
看起来 docker 没有找到主类,即使它是在我的 pom.xml 中定义的:
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<mainClass>de.elbdev.backend.Application</mainClass>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>${mainClass}</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
主要类别:
package de.company.backend;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
在您的 pom.xml 中,copy-dependencies目标是在以下install阶段指定的:为时已晚,jar 的打包已经完成。
我正在尝试 dockerize 一个使用 Maven 构建的简单 Spring Boot 应用程序。
您不需要声明任何插件来创建一个可以由 docker 容器运行的带有 spring boot 的 fat jar。
声明这些插件很容易出错(并且应该只在极端情况下使用),而默认附加到 maven 的 package 阶段的spring boot maven 插件的目标将为您创建 fat jar :repackage
重新打包现有的 JAR 和 WAR 档案,以便可以使用 java -jar 从命令行执行它们
只要删除这些插件声明并执行mvn clean package就可以了。
边注 :
来自 openjdk:最新
不要用作latest图像版本,而应使用图像的特定版本,否则您可能会遇到不好的意外。当您使用 JDK 8 时,您可以指定 JRE 或 JDK 8,例如 FROM openjdk:8-jre-alpine:
| 归档时间: |
|
| 查看次数: |
10491 次 |
| 最近记录: |