将Java MapStruct与VSCode一起使用

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

我正在使用Java Mapstruct。使用gradle bootRun可以正常运行,但是VSCode在调试和运行单元测试方面存在一些问题:java.lang.ClassNotFoundException: Cannot find implementation

信息:IDE VSCode,SpringBoot 2.2.2,Java SDK 11,Gradle 6.1.1

build.gradle:

compileJava {
    options.compilerArgs = [
            '-Amapstruct.defaultComponentModel=spring'
    ]
}

dependencies {
    implementation 'org.mapstruct:mapstruct-jdk8:1.3.1.Final'
    implementation 'org.mapstruct:mapstruct-processor:1.3.1.Final'
    annotationProcessor 'org.mapstruct:mapstruct-processor:1.3.1.Final'
    testAnnotationProcessor 'org.mapstruct:mapstruct-processor:1.3.1.Final'
}

launch.json用于VSCode中的调试:

 {
            "type": "java",
            "name": "Debug (Launch)-DemoApplication<demo>",
            "request": "launch",
            "mainClass": "com.api.demo.DemoApplication",
            "projectName": "demo",
            "args": [
                "-Amapstruct.defaultComponentModel=spring",
                "-DprocessorIntegrationTest.debug=true",
                "-classpath",
                "${workspaceFolder}/build/classes/"
            ],
            "sourcePaths": [
                "${workspaceFolder}/build/generated/"
            ]
        }

映射器文件:

@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface UserPayloadMapper extends GenericPayloadMapper<User, UserRegistryRequest, UserRegistryResponse> {
    UserPayloadMapper INSTANCE = Mappers.getMapper(UserPayloadMapper.class);

    @Mapping(source = "userId", target = "id")
    public User fromRequest(UserRegistryRequest request);

    public UserRegistryResponse toResponse(User user);
}

有人可以帮助我配置VSCode来运行调试和单元测试吗?我认为在运行调试和单元测试之前,它不会加载生成的源代码,但我不知道如何解决它。

编辑:对于单元测试文件,如果添加@SpringBootTest(classes = { UserPayloadMapper.class }),它将可以正常运行,但是在单元测试代码中没有与此映射器相关的内容,并且我有几个这样的映射器,我无法将所有映射器都放入每个单元测试中。

java visual-studio-code mapstruct
1个回答
0
投票

我找到了解决方案:添加@ComponentScan(basePackages = "com.api.demo/build/classes/java/main/com/api/demo/service/mapper"),它可以工作(到mapstruct生成的文件夹中。)>

© www.soinside.com 2019 - 2024. All rights reserved.