[英]java.lang.NoClassDefFoundError when trying to run gradle build
我正在嘗試從 Dockerfile 運行 java 應用程序。Dockerfile 如下所示:
FROM gradle:7.2-jdk17-alpine AS build
COPY --chown=gradle:gradle . /home/gradle/src
WORKDIR /home/gradle/src
RUN gradle build --no-daemon
FROM openjdk:17
EXPOSE 7070
RUN mkdir /app
COPY --from=build /home/gradle/src/build/libs/*.jar /app/app.jar
ENTRYPOINT ["java", "-jar", "/app/app.jar"]
容器構建圖像,但當我嘗試運行容器時,出現錯誤:
Exception in thread "main" java.lang.NoClassDefFoundError: com/mongodb/client/MongoClients
我的build.gradle有問題嗎?
plugins {
id 'java'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'io.javalin:javalin:4.6.4'
implementation 'org.slf4j:slf4j-simple:1.8.0-beta4'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.3'
implementation 'org.mongodb:mongodb-driver-sync:4.7.1'
implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
implementation 'io.jsonwebtoken:jjwt-impl:0.11.5'
implementation 'io.jsonwebtoken:jjwt-jackson:0.11.5'
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.3'
implementation 'org.apache.poi:poi:5.2.2'
implementation 'org.apache.poi:poi-ooxml:5.2.2'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.0'
testImplementation 'org.mockito:mockito-core:4.7.0'
testImplementation 'com.tngtech.archunit:archunit-junit5:0.23.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.9.0'
}
test {
useJUnitPlatform()
}
jar {
manifest {
attributes(
'Main-Class': 'packagename.Application'
)
}
}
經過幾個小時的谷歌搜索,我更新了我的 build.gradle:
plugins {
id 'java'
id 'com.github.johnrengelman.shadow' version '7.1.2'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'io.javalin:javalin:4.6.4'
implementation 'org.slf4j:slf4j-simple:1.8.0-beta4'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.3'
implementation 'org.mongodb:mongodb-driver-sync:4.7.1'
implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
implementation 'io.jsonwebtoken:jjwt-impl:0.11.5'
implementation 'io.jsonwebtoken:jjwt-jackson:0.11.5'
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.3'
implementation 'org.apache.poi:poi:5.2.2'
implementation 'org.apache.poi:poi-ooxml:5.2.2'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.0'
testImplementation 'org.mockito:mockito-core:4.7.0'
testImplementation 'com.tngtech.archunit:archunit-junit5:0.23.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.9.0'
}
test {
useJUnitPlatform()
}
jar {
manifest {
attributes(
'Main-Class': 'packagename.Application',
'Class-Path': '/libs/*.jar'
)
}
}
並構建 jar 我知道使用./gradlew --no-daemon shadowJar。 這對我行得通。 希望這對某人有幫助:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.