GWT-Jackson-Apt, казалось бы, неопределенный вызов конструктора класса - PullRequest
0 голосов
/ 08 февраля 2019

Глядя на попытку использовать библиотеку GWT-Jackson-Apt для выполнения определенного RPC, но при рассмотрении примеров и попытке запуска некоторых демонстраций всегда есть интерфейсы с причудливым неопределенным вызовом конструктора.

 @JSONMapper
public interface SampleMapper extends ObjectMapper<SimpleBean> {
    SampleMapper INSTANCE = new App_SampleMapperImpl();
}

source: https://github.com/DominoKit/gwt-jackson-apt/blob/f60d0358b90bcbf78d066796f680aeae1d7156bb/samples/basic/basic-client/src/main/java/org/dominokit/jacksonapt/samples/basic/App.java

Я копался, но нет определения App_SampleMapperImpl () где-либо в исходном коде.И он не компилируется, говоря, что существует неопределенный символ

Точно то же самое делается в примерах файла readme, которые можно найти на этой странице: https://github.com/DominoKit/gwt-jackson-apt/tree/f60d0358b90bcbf78d066796f680aeae1d7156bb

Кто-нибудь может объяснить, что здесь происходит?Как этот конструктор определяется или подразумевается?И что мне нужно сделать, чтобы пример компилировался?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Если вы делаете проект Maven, важно включить процессор аннотаций, который генерирует картографы.Затем, как только проект узнает, как их генерировать, вы сможете использовать их в своем коде.

Процессоры аннотаций запускают , а компилятор работает, что означает, что вы технически можете получитьнаписать код, который не появляется, он скомпилирует.Затем, когда компилятор работает, он просит все зарегистрированные обработчики аннотаций сгенерировать код на основе аннотаций и существующих типов ( не отсутствующие ссылки, такие как App_Sample_MapperImpl, как вы могли бы подумать).Затем процессор запускается, генерирует отсутствующий класс, а затем продолжается компиляция.

Обычно происходит сборка во время написания кода (например, eclipse делает это при каждом сохранении файла, intellij делает это)когда вы запрашиваете сборку и т. д.), а затем класс существует и на него можно ссылаться в будущем.Даже когда проект очищается и перестраивается, хотя ссылка кажется, что она не должна работать, она будет работать, как только запустится компилятор.


В этом случае нам нужно будет следовать примеручтобы убедиться, что процессор присутствует.в https://github.com/DominoKit/gwt-jackson-apt/blob/f60d0358b90bcbf78d066796f680aeae1d7156bb/samples/shared-mappers/shared-mappers-shared/pom.xml, мы видим это в зависимостях:

    <dependency>
      <groupId>org.dominokit.jackson</groupId>
      <artifactId>jackson-apt-processor</artifactId>
      <version>1.0-SNAPSHOT</version>
      <scope>provided</scope>
    </dependency>

Это помечено scope=provided, так как это нужно только для компиляции, и не должно быть включено в более поздние графики зависимостей.Для каждой конкретной среды IDE может потребоваться указать дополнительные параметры, чтобы она автоматически запускалась повторно (флажок в Eclipse, я полагаю, ничего в IntelliJ, и я не использовал другие среды IDE слишком долго, чтобы сказать).

Последнее замечание для maven: вы должны использовать относительно недавний плагин maven-compiler-plugin, чтобы сгенерированный код обрабатывался правильно: последний - 3.8.0, опубликован в июле 2018 года, но я думаю, что что-то после 3.5.1 будет достаточно, еслиВы должны использовать более старый.

0 голосов
/ 08 февраля 2019

Просто следуйте примеру на главной странице проекта: https://github.com/DominoKit/gwt-jackson-apt/

Это работает?

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