IntelliJ Idea下使用MapStruct Java时出现错误:映射处理器内部错误:java.lang.NullPointerException。

96

在升级到Idea 2020.3版本后,我遇到了映射处理器的NullPointerException问题。如果有人有线索...谢谢!

6个回答

201
解决方案是将MapStruct更新至1.4.1.Final或更高版本,有关详细信息请参见此问题
您还可以在“文件”| “设置”(macOS上的“首选项”)|“构建、执行、部署”|“编译器”|“构建过程VM选项”中添加-Djps.track.ap.dependencies=false作为解决方法。

5
将MapStruct升级至1.4.1.Final后,我遇到了另一个问题,而在1.3版本中却没有出现过 - “找不到使用@Named#value注释的方法”。有人遇到过这个问题吗? - Barun
1
你只需要在方法上添加@Named注解,并在使用它的地方添加qualifiedByName即可。 - Javeson Yehudi
2
IDE不应该成为强制项目更新库的驱动程序。 - dimitrisli
5
谢谢,加上-Djps.track.ap.dependencies=false确实帮了我! - ademarizu
我们在Windows上使用MapStruct 1.2 Final时遇到了同样的问题,如果我们直接在Java类上运行测试。使用"-Djps.track.ap.dependencies=false"可以解决我们的问题。 - undefined
显示剩余3条评论

153
如果您无法更新MapStruct(就像我一样),可在此处找到详细信息:详情
您需要找到确切的位置来设置-Djps.track.ap.dependencies=false(我曾经花费了很长时间才找到该位置)。
所以,就像他们说的那样,一张图片胜过千言万语: 打开首选项 --> 构建、执行、部署 --> 编译器 并写入 ps.track.ap.dependencies=false 首选项 --> 构建、执行、部署 --> 编译器

5
无瑕疵的答案 @freedev - Gaurav

19

这里有几个IntelliJ的bug。如果我将Maven版本从1.3.0.Final更改为1.4.1.Final,则IntelliJ不会更新版本。

解决方案:

  1. 将Maven版本升级为1.4.1.Final
  2. 手动从“外部库”(项目结构 | 库)中删除Mapstruct 1.3.1.Final
  3. mvn clean package
  4. 单击重新加载所有Maven项目

它可以在没有-Djps.track.ap.dependencies=false的情况下正常工作。

如果您有Swagger,请先排除Mapstruct:

<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger2.version}</version>
<exclusions>
    <exclusion>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct</artifactId>
    </exclusion>
</exclusions>

1
手动从外部库中删除旧版本并重新加载Maven项目对我有用。 - Will

7

freedev's的回答基础上进行扩展。对于Windows用户,以下是需要前往的地方:

  1. 单击右侧的设置齿轮图标。 enter image description here
  2. 进入设置(使用ctrl+A+S快捷键也可以到达此处)。
  3. 在左侧菜单中的“构建、执行、部署”下找到编译器。 enter image description here
  4. 在用户本地构建过程VM选项中添加-Djps.track.ap.dependencies=false

3
在我的情况下,我做了这些改变,现在它对我来说完美运行。

enter image description here

enter image description here

然后我只是删除了缓存并重新构建了整个项目,也许这并不是必要的,但对我来说有效。

1
在我的情况下,我的build.gradle配置不正确。我在两个独立项目(command和custom-mapper)中使用了一些Mapstruct SPI AccessorNamingStrategy,并将其包含在build gradle的annotationProcessor中两次。 我的解决方案是删除其中一个注释,然后它就可以工作了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接