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

标签 java intellij-idea annotation-processing mapstruct

我有一个基于 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 和 on GitHub 上遇到过类似的问题.不幸的是,他们没有帮助。他们要么使用旧版本的库、旧的 JVM,要么只是解决方案不起作用。

最佳答案

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

关于java - 如果应用程序是从 IntelliJ IDEA 运行的,则找不到 Mapstruct 生成的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58166624/

相关文章:

java - 使用 JavaPoet 生成一个字段作为匿名类

java - 仅适用于 S3 的自定义 aws 包装 jar

java - spark0.9.1 foreach println 不起作用

java - 用于压缩的 Gzip 返回与原始大小相似的大小

java - 如何在 IntelliJ 中使用现有的 Java 类型渲染器作为 Java 类型渲染器?

java - 编译轮次中处理环境成员的一致性

java - 如何使用 Angular 2 在 Spring 引导中导出 excel 文件?

java - 无法解析方法 'List.of(java.lang.String, java.lang.String)'

java - IntelliJ IDEA 2016.3 无法用 java 7 编译

annotation-processing - 在我的项目源码包下生成java源码