Resolving Internal Error in MapStruct Mapping Processor: java.lang.NullPointerException in IntelliJ IDEA 2020.3

Dec 08, 2025 · Programming · 8 views · 7.8

Keywords: IntelliJ IDEA | MapStruct | NullPointerException

Abstract: This article provides an in-depth analysis of the NullPointerException internal error in the MapStruct mapping processor after upgrading to IntelliJ IDEA 2020.3. The core solutions include updating MapStruct to version 1.4.1.Final or later, or adding the -Djps.track.ap.dependencies=false VM option in compiler settings as a temporary workaround. Through code examples and configuration steps, it helps developers quickly diagnose and fix this compatibility issue to ensure project build stability.

Problem Background and Symptom Analysis

After upgrading to IntelliJ IDEA 2020.3, many developers encountered a critical build error when using MapStruct for object mapping: the mapping processor internally throws a java.lang.NullPointerException. This error typically occurs during the compilation phase, preventing normal project builds and significantly impacting development efficiency. Technically, this issue stems from compatibility problems between the build system changes introduced in IntelliJ IDEA 2020.3 and the MapStruct annotation processor.

Root Cause Investigation

MapStruct is an annotation-based Java object mapping framework that generates mapping implementation code at compile time via an annotation processor. In IntelliJ IDEA 2020.3, the JPS (JetBrains Project System) build system enhanced its tracking mechanism for annotation processor dependencies, but this improvement conflicted with the internal implementation of certain MapStruct versions, leading to null pointer exceptions during dependency resolution. Specifically, when the processor attempts to access improperly initialized dependencies, it triggers a NullPointerException.

Primary Solution: Update MapStruct Version

The most direct and effective solution is to upgrade MapStruct to version 1.4.1.Final or later. The MapStruct team addressed the compatibility issue with IntelliJ IDEA 2020.3's build system in version 1.4.1.Final. Below is an example code for updating dependencies:

<dependency>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct</artifactId>
    <version>1.4.2.Final</version>
</dependency>
<dependency>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct-processor</artifactId>
    <version>1.4.2.Final</version>
    <scope>provided</scope>
</dependency>

After updating, rebuild the project; the annotation processor should handle dependencies correctly, eliminating the null pointer exception. Developers should regularly check MapStruct release notes to ensure they are using the latest stable version.

Temporary Workaround: Adjust Compiler Settings

If updating MapStruct immediately is not feasible (e.g., in legacy projects), a temporary workaround is to add the VM option -Djps.track.ap.dependencies=false in IntelliJ IDEA's compiler settings. This parameter disables JPS's tracking of annotation processor dependencies, thus avoiding the null pointer exception. Configuration steps are as follows:

  1. Open IntelliJ IDEA and go to FileSettings (or Preferences on macOS).
  2. Navigate to Build, Execution, DeploymentCompiler.
  3. In the Build process VM options field, enter -Djps.track.ap.dependencies=false.
  4. Click Apply and rebuild the project.

While this method resolves the issue, it may affect the build system's optimization of annotation processor dependencies; it is recommended only as a short-term measure, with plans to upgrade MapStruct as soon as possible.

Code Example and Verification

To verify the effectiveness of the solutions, create a simple MapStruct mapping interface for testing. The following example code demonstrates how to define and use a mapping interface:

import org.mapstruct.Mapper;
import org.mapstruct.Mapping;

@Mapper
public interface UserMapper {
    @Mapping(source = "name", target = "fullName")
    UserDTO toDto(UserEntity user);
}

// Entity class
class UserEntity {
    private String name;
    private String email;
    // Constructors, getters, and setters omitted
}

// Data transfer object
class UserDTO {
    private String fullName;
    private String email;
    // Constructors, getters, and setters omitted
}

After applying the above solutions, compiling this code should successfully generate the mapping implementation without throwing a NullPointerException. If the issue persists, check IDE and project configurations to ensure no other conflicting factors.

Conclusion and Best Practices

The compatibility issue between IntelliJ IDEA 2020.3 and MapStruct highlights the importance of version management for development tools and frameworks. Developers are advised to:

With the solutions provided in this article, developers can quickly restore project build processes, ensuring development efficiency is not compromised. For more technical details, refer to MapStruct's GitHub issue tracker.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.