当前位置: 首页 > 知识库问答 >
问题:

ClassNotFound组织。mapstruct。工厂Docker图像中的映射器

窦弘义
2023-03-14

我正在使用Mapstruct(使用lombok),当我在调用使用Mapstruct将DTO映射到实体的endpoint后对应用程序进行dockerize时,Mapstruct失败。

引起:java.lang.ClassNotFoundException:org.mapstruct.factory.映射器在java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:435)在java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)在org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151)在java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)

当我在本地运行应用程序时,一切都很好,但是对接应用程序会导致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中的依赖项和docker插件。格雷德尔


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类在docker?

共有2个答案

艾原
2023-03-14

我认为你需要用依赖关系来构建jar。如果你用maven构建它,只需在pom中添加以下内容。xml

傅浩漫
2023-03-14

我不太了解您是如何创建docker映像的。但是,我相信问题是您正在使用compileOnly作为mapstruct依赖项(Mappers工厂所在的位置)。

我认为,compileOnly不再被鼓励使用,而且对于org来说,它从来都不是正确的。mapstruct:mapstruct无论如何。如果您正在为映射器使用默认组件模型,并且希望使用映射器工厂,则使用组织。mapstruct:mapstruct依赖关系绝对不是编译的。你需要改变它,你的docker图像才能正常工作。

 类似资料:
  • 我正在尝试使用MapSTRt将json序列化添加到我的SpringBoot应用程序中。@Mapper类使用@Service添加一些“后映射”逻辑。问题是,这个@Service类不是自动装配的。 这是我的Mapper类: 当调用方法时,应用程序将与NPE一起失败,尝试。 希望这些信息足够了。如果还需要什么,请告诉我。 提前谢谢! 更新: MarketDataService类。它通过@Service注

  • 我有麻烦映射一个嵌套dto字段正确与MapStruct。我有几个DTO: 具有相应的映射器 到目前为止,一切工作都很好,生成的代码自动连接其他需要的映射器来正确地构建DTO。例如生成的仪器映射器实现 现在,当我试图创建一个包含嵌套工具dto的映射器时遇到了麻烦。映射器应使用instrumentMapper正确创建所需的dto。DTO: 映射器: 生成的代码: 现在media mapper得到了很好

  • 我正在使用Spring,并且在我的项目中从mapstruct库开始,所以我有了一个想法,为@mapper(componentModel=“Spring”)创建原型注释,比如@springmapper。但它不会生成任何映射器。 是不可能还是我做错了什么?

  • 我试图使用MapStruct在dto和实体对象之间映射convert,但是生成的映射器实现只返回空的映射对象。 BeermapperImpl 任何人都可以提供我的代码可能出错的地方?谢谢!

  • 我尝试使用MapStruct编写映射器类,如下所示: 目前它显示了“未知属性”“customer.customerid”和“usertypes.usertype.userid”等错误。有人能帮我用MapStruct映射所有这些元素吗? 问题2:我们如何绘制跟踪图?1)customerId usertypes->user->userid 2)pdtPrice offers->OffersType->

  • 下面的例子中,我有一个单独的域层和一个单独的持久层。我使用Mapstruct进行映射,当从域映射到实体或从实体映射到域时,会出现堆栈溢出,因为双向引用总是被调用- 用于映射的类非常基本