我正在使用Mapstruct (与lombok一起使用),而Mapstruct在调用端点(使用MapStruct将DTO映射到实体)后对应用程序进行对接时失败。
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)的java.lang.ClassNotFoundException: org.mapstruct.factory.Mappers
当我在本地运行这个应用程序时,一切都运行得很好,但是修改这个应用程序会使Mapstruct失败。
Dockerfile:
FROM openjdk:15-alpine
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]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'
}我是不是缺少了什么,或者我还需要做些什么才能让Impl类在对接器中得到呢?
发布于 2021-09-05 16:22:45
我不太了解你是如何塑造你的码头形象的。但是,我认为问题在于您使用compileOnly作为mapstruct依赖项( Mappers工厂所在的位置)。
我认为不再鼓励使用compileOnly,而且对org.mapstruct:mapstruct来说也不是正确的。如果您正在为映射程序使用默认的组件模型,并且希望使用Mappers工厂,那么org.mapstruct:mapstruct依赖项肯定不是compileOnly。你需要改变你的码头形象才能正常工作。
发布于 2021-09-04 18:41:26
我认为您需要使用依赖关系构建jar。如果您使用maven构建它,只需在pom.xml中添加以下内容
<descriptorRef> jar-with-dependencies </descriptorRef>
https://stackoverflow.com/questions/69057765
复制相似问题