Mapstruct не обновляет свои методы получения и установки в сгенерированных исходных файлах - PullRequest
0 голосов
/ 02 июля 2019

У меня есть объект со свойством, которое я писал так частная длинная реанимация;

Я использую mapstruct:

Вот мой картограф для указанной сущности:

@Mapper(componentModel = "spring")
public interface ProtectionQueryMapper extends EntityMapper<ProtectionQueryDto, Protection> {

    ProtectionQueryDto toDto(Protection protection);

    Protection toEntity(ProtectionQueryDto protectionQueryDto);

    List<Protection> toEntity(List<ProtectionQueryDto> protectionQueryDtos);

    List<ProtectionQueryDto> toDto(List<Protection> protections);

}
public interface EntityMapper<D, E> {

    E toEntity(D dto);

    D toDto(E entity);

    List<E> toEntity(List<D> dtoList);

    List<D> toDto(List<E> entityList);
}

У меня проблема в том, что я хочу изменить свойство с ICU go icu, что я и сделал, и это привело к этой ошибке:

вложенным исключением является java.lang.NoSuchMethodError:

Protection.getICU () Ljava / языки / Long;

Казалось бы, mapstruct генерирует свои методы получения и установки на основе: private Long ICU; метод генерации, такой как setICU и getICU. Но теперь, когда я изменил свойство с ICU на icu, mapstruct не обновляет свой метод до setIcu и getIcu.

Я не могу изменить сгенерированный файл mapstruct вручную.

Также вот мой pom.xml (по крайней мере, часть, касающаяся mapstruct)

<dependency>
  <groupId>org.mapstruct</groupId>
  <artifactId>mapstruct</artifactId>  
  <version>1.3.0.Final</version>
</dependency>

              <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.mapstruct</groupId>
                            <artifactId>mapstruct-processor</artifactId>
                            <version>1.3.0.Final</version>
                        </path>
                    </annotationProcessorPaths>
                    <compilerArgs>
                        <compilerArg>
                            <arg>-Amapstruct.defaultComponentModel=spring</arg>
                        </compilerArg>
                    </compilerArgs>
                </configuration>
            </plugin>

Есть идеи, как заставить mapstruct обновить сгенерированный исходный файл?

Ответы [ 2 ]

2 голосов
/ 03 июля 2019

По какой-то причине при перекомпиляции проекта не работал процессор аннотаций.MapStruct вызывается компилятором Java, а maven-compiler-plugin отвечает за очистку папки с помощью сгенерированных классов.

Выполнение mvn clean compile всегда будет работать.Однако, если внести изменения, а затем выполнить mvn compile, нет, я бы попытался использовать последнюю версию maven-compiler-plugin и, если это все еще не работает, создать отчет об ошибках для плагина.

0 голосов
/ 04 июля 2019

Если вы используете Lombok для ваших сущностей и DTO, вы должны обновить свой pom.xml следующим образом:

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.mapstruct</groupId>
                            <artifactId>mapstruct-processor</artifactId>
                            <version>${mapstruct.version}</version>
                        </path>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>${lombok.version}</version>
                        </path>
                    </annotationProcessorPaths>
                    <compilerArgs>
                        <compilerArg>
                            <arg>-Amapstruct.defaultComponentModel=spring</arg>
                        </compilerArg>
                    </compilerArgs>
                </configuration>
            </plugin>

Тогда Mupstruct сможет видеть их геттеры и сеттеры.

(Вы можете проверить мой проект и его демо , чтобы увидеть это в действии.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...