Использование java MapStruct с VSCode - PullRequest
0 голосов
/ 23 марта 2020

Я работаю с 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'
}

запуск. 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 }), это будет работать правильно, но внутри кода модульного теста ничего не имеет отношения к этому преобразователю, и у меня есть несколько подобных преобразователей, я не могу поместить их все в каждый модульный тест.

1 Ответ

0 голосов
/ 23 марта 2020

Я нашел решение: добавьте @ComponentScan(basePackages = "com.api.demo/build/classes/java/main/com/api/demo/service/mapper"), и оно работает (в папку, сгенерированную mapstruct).

...