我有一个带有以下 build.gradle 的 Spring Boot 3 应用程序
plugins {
id 'groovy'
id 'org.springframework.boot' version '3.1.3'
id 'io.spring.dependency-management' version '1.1.3'
}
group = 'myPackage'
version = '0.0.1'
java {
sourceCompatibility = '17'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-quartz'
implementation 'org.apache.groovy:groovy'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// für getter und setter als anotation ....
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
// Mysql
// https://mvnrepository.com/artifact/mysql/mysql-connector-java
implementation 'mysql:mysql-connector-java:5.1.49'
// https://mvnrepository.com/artifact/org.apache.groovy/groovy-json
implementation 'org.apache.groovy:groovy-json:4.0.14'
}
tasks.named('test') {
useJUnitPlatform()
}
tasks.named('jar') {
manifest {
attributes["Main-Class"] = "mypackage.MyProject"
}
}
如果我创建一个 jar 并在 docker 文件中使用这个 jar:
FROM openjdk:17
COPY build/libs/MyProject-*-plain.jar MyProject.jar
EXPOSE 8083
ENTRYPOINT ["java", "-jar", "MyProject.jar"]
我收到错误消息:
错误:无法找到或加载主类 mypackage.MyProject 2023-08-28T17:50:37.927951378Z 引起:java.lang.NoClassDefFoundError:groovy/lang/GroovyObject
谢谢您的帮助...
您使用了错误的人工制品。
COPY build/libs/MyProject-*-plain.jar MyProject.jar
(注意中的-plain
)
名称)只是编译形式的“您的代码”。所有依赖项均丢失。
检查您的 build/libs
的尺寸:
# ls -lh build/libs/*.jar
-rw-rw-r-- 1 user group 50M Aug 29 07:41 build/libs/project.jar
-rw-rw-r-- 1 user group 326K Aug 29 07:41 build/libs/project-plain.jar
注意那里另一个更大的罐子。这是“uber”或“fat”罐子 Spring-Boot 为您构建,其中包含您的代码,还包含您的所有内容 部门。
如果您在为
COPY
选择此文件时遇到问题,您可以告诉 Spring-Boot 插件使用不同的名称。
旁注:openjdk
始终是非生产图像,现在是偶数 已弃用。