java - 将 java MapStruct 与 VSCode 结合使用

标签 java visual-studio-code mapstruct

我正在使用 java Mapstruct。使用 gradle bootRun 运行可以正常工作,但我在使用 VSCode 进行调试和运行单元测试时遇到一些问题:java.lang.ClassNotFoundException:找不到实现

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

构建.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 }) 这将正常运行,但在单元测试代码内部与此映射器没有任何关系,并且我有几个这样的映射器,我无法将它们全部放入每个单元测试中。

最佳答案

我找到了解决方案:添加 @ComponentScan(basePackages = "com.api.demo/build/classes/java/main/com/api/demo/service/mapper") 并且它有效(到mapstruct生成的文件夹)。

关于java - 将 java MapStruct 与 VSCode 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60809894/

相关文章:

java - 如何在标签上设置整数值?

java - 通过 OSHI API 从传感器检索信息时为什么会发生这种情况?

java - Spring boot Mapstruct StackOverFlow错误

java - 映射嵌套 beans 列表 : "org.mapstruct.Mapping"

java - 使用 MapStructs 表达式映射属性

java - 无法通过 IntelliJ Idea 在 tomcat 上运行服务

java - 截图 - 后台服务

visual-studio-code - 如何使用 editor.tokenColorCustomizations 而不是工作台更改 vscode 中的编辑器背景颜色

angular - 无法读取 Visual Code 中未定义的属性 'thisCompilation'

visual-studio-code - Solidity:有没有办法为导入的合约获取 VSCode Intellisense?