如果应用程序从 IntelliJ IDEA 运行,则找不到 Mapstruct 生成的类

问题描述 投票:0回答:2

我有一个基于 Java 11 的应用程序,它是使用 Gradle 4.8.1 构建的,它使用 Mapstruct 1.3.0.Final。我使用 IntelliJ IDEA Ultimate 2019.2.3 进行开发。

问题:

如果我从 IntelliJ IDEA 启动该应用程序,则该应用程序无法运行,但在使用 Gradle 构建时它可以运行。

当我从 IntelliJ 启动应用程序时,运行时出现以下错误:

ClassNotFoundException: Cannot find implementation for com.mycompany.MyMapper
    at org.mapstruct.factory.Mappers.getMapper(Mappers.java:75)
    at org.mapstruct.factory.Mappers.getMapper(Mappers.java:58)

我的项目设置:

我使用了另一种注释处理工具 - Lombok,效果很好。我把它们放在我的依赖项中,就像这样:

compileOnly('org.projectlombok:lombok:1.18.10')
annotationProcessor('org.projectlombok:lombok:1.18.10')
compile('org.mapstruct:mapstruct:1.3.0.Final')
annotationProcessor('org.mapstruct:mapstruct-processor:1.3.0.Final')

如何重现: 从需要用 Mapstruct 生成的类的 IntelliJ UI 开始单元测试就足够了。

问题: 如何让IntelliJ IDEA正确应用Mapstruct注解处理器?

我尝试过的内容: 我在 StackOveflow 和GitHub 上遇到了类似的问题。不幸的是,他们没有帮助。他们要么使用旧版本的库,旧的 JVM,要么只是解决方案不起作用。

java intellij-idea annotation-processing mapstruct
2个回答
3
投票

请在“Settings/Preferences | Build, Execution, Deployment | Build Tools | Gradle”中设置“Build and Run using Gradle”


0
投票

如果您在使用@y.bedrov 回答后仍面临问题。 以下更改对我有用: 添加生成的目录作为源代码。

sourceSets {
    main.java.srcDirs += "build/generated/sources/annotationProcessor/java/main"
}

为 Mapper 类添加 componentModel-(这告诉 Micronaut 为映射器创建一个 bean。)

@Mapper(componentModel = "jsr330")
© www.soinside.com 2019 - 2024. All rights reserved.