我有一个Sping Boot 3应用程序,其build.gradle如下
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- 28 T17:50:37.927951378Z原因:java.lang.NoClassDefFoundError:groovy/lang/GroovyObject
谢谢你的帮助。。
1条答案
按热度按时间yxyvkwin1#
你用错了东西。
COPY build/libs/MyProject-*-plain.jar MyProject.jar
(注意名称中的-plain
)只是你的代码编译后的形式。所有依赖项均缺失。检查
build/libs
的大小:注意另一个,更大的jar。这是为你准备的“超级”或“胖”jar Spring Boot构建,其中包含了你的代码和所有的deps。
在使用这个jar时,您还可以在清单中删除您自己对
main-class
的处理;这个插件已经为fat jar做了这些。如果您在为
COPY
选择此文件时遇到问题,您可以告诉Spring-Boot插件使用不同的名称,如下所示:这将导致文件以
-fat.jar
结尾。注:
openjdk
一直是一个非生产映像,现在甚至被弃用。