Sping Boot 3,groovy,docker

xienkqul  于 8个月前  发布在  Docker
关注(0)|答案(1)|浏览(72)

我有一个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
谢谢你的帮助。。

yxyvkwin

yxyvkwin1#

你用错了东西。
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

注意另一个,更大的jar。这是为你准备的“超级”或“胖”jar Spring Boot构建,其中包含了你的代码和所有的deps。
在使用这个jar时,您还可以在清单中删除您自己对main-class的处理;这个插件已经为fat jar做了这些。
如果您在为COPY选择此文件时遇到问题,您可以告诉Spring-Boot插件使用不同的名称,如下所示:

bootJar.archiveClassifier = "fat"

这将导致文件以-fat.jar结尾。
注:openjdk一直是一个非生产映像,现在甚至被弃用。

相关问题