Как правильно интегрировать MapStruct с Eclipse?(Включая Java-агент Lombok) - PullRequest
2 голосов
/ 08 апреля 2019

Я готов использовать MapStruct в каком-то официальном проекте, поэтому я решил сначала провести его тестирование; Мне нужно, чтобы он работал интегрированно с Eclipse и следовал всем инструкциям, представленным на сайте MapStruct, но ... пока что не повезло. Кто-нибудь преуспел в такой интеграции? и если да , что я могу пропустить?

Мой тест начался с чего-то большего, но когда я понял, что это не работает, я решил использовать меньший пример, поэтому я сделал следующее:

  • Использование openjdk-10.0.1_windows-x64
  • скачал и установил свежую версию eclipse (Затмить-Jee-2019-03-R-win32-x86_64)
  • установлена ​​последняя версия m2e-apt (и плагин mapstruct, хотя для это упражнение) как предложено в http://mapstruct.org/documentation/ide-support/
  • скачано https://github.com/mapstruct/mapstruct-examples
  • импортировано из git (из затмения) проекта mapstruct-clone (посмотрел самый простой пример)
  • проверил настройки как предложено в http://mapstruct.org/documentation/dev/reference/html/ (глава 2.1) и все выглядит хорошо

... нет способа убедить Eclipse автоматически сгенерировать реализацию Mapper, я даже добавил в pom строку jdt_apt.

Вот фрагмент кода pom.xml - обратитесь к проекту mapstruct-clone для всего кода.

<properties>
    <org.mapstruct.version>1.3.0.Final</org.mapstruct.version>
    <m2e.apt.activation>jdt_apt</m2e.apt.activation>
</properties>

Ожидаемый результат будет:

  • чтобы найти мои сгенерированные классы в "цель / сгенерированные источники / аннотации", когда я сохраняю отображение интерфейс
  • (как указано http://mapstruct.org/documentation/dev/reference/html/ "он настроит процессор аннотаций MapStruct, чтобы он работал правильно в IDE, каждый раз, когда вы сохраняете тип картографа. Аккуратно, не так ли? ")
  • но не
  • Я могу получить только классы, сгенерированные с помощью "чистой установки mvn" что хорошо, но не очень удобно

Важное редактирование: я также использую JavaBent Lombok

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

В конце концов я нашел решение проблемы (= D)

  • во-первых, спасибо Сяаку Дерксену из команды MapStruct за поддержку
  • , во-вторых, спасибо Павлу Хоралу за публикацию этого решенияhttps://github.com/mapstruct/mapstruct/issues/1159
  • и, наконец, спасибо мне за то, что я такой упрямый (ну, иногда это помогает)

Проблема действительно была связана с несовместимостью между Java-агентом Lombok и MapStruct.Чтобы заставить его работать, просто сделайте то, что предложил Павел в своем последнем посте, и это сработает:

[...] просто удалите регистрацию SPI внутри lombok.jar (удалив META-INF / services/org.mapstruct.ap.spi.AstModifyingAnnotationProcessor) [...]

0 голосов
/ 18 апреля 2019

Я действительно столкнулся с очень похожей проблемой и решил ее немного по-другому.

  1. Как описано в OP, убедитесь, что это свойство объявлено в pom.xml:

    <properties> ... <m2e.apt.activation>jdt_apt</m2e.apt.activation> ... </properties>

  2. Очевидно, что плагин m2e-apt для Eclipse должен быть установлен: https://marketplace.eclipse.org/content/m2e-apt

  3. В файле pom.xml убедитесь, что mapstruct-процессор и lombok находятся в области действия.

  4. И последнее, но не менее важное: мне пришлось настроить lombok.jar, добавив файл org.mapstruct.ap.spi.AstModifyingAnnotationProcessor.class в банку (см. https://github.com/mapstruct/mapstruct/issues/1159#issuecomment-328974483).

Протестировано с Eclipse 2019-03, Lombok 1.18.6 и Mapstruct 1.2.0.Final.

Надеюсь, это поможет!

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