mapstruct / mapstruct-examples

Examples for using MapStruct
Other
1.28k stars 511 forks source link

ClassNotFound org.mapstruct.factory.Mappers in Docker Image #123

Closed Steam1996 closed 3 years ago

Steam1996 commented 3 years ago

I am using Mapstruct (with lombok), and Mapstruct fails when I dockerize the app after calling an endpoint which uses MapStruct to map a DTO to entity.

Caused by: java.lang.ClassNotFoundException: org.mapstruct.factory.Mappers at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:435) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589) at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)

Everything works well when I run the app locally, but dockerizing the app makes Mapstruct fail.

Dockerfile:

FROM openjdk:15-alpine
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

Dependencies and docker plugin in build.gradle:


docker {
    dependsOn build as Task
    name "${project.group}/${jar.baseName}"
    files bootJar.archivePath
    buildArgs(['JAR_FILE': "${bootJar.archiveName}"])
}

dependencies {
    .....

    compileOnly 'org.mapstruct:mapstruct:1.4.1.Final'
    annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.1.Final'
}

Is there something I am missing or I need to do additionally to have Impl classes in the docker? I am using palantir/gradle-docker for the gradle-docker plugin.

filiphr commented 3 years ago

I see that you have posted this question as well on StackOverflow. Please do not cross post. You will get the answer on StackOverflow.