Исключение сериализации GWT с AutoValue

Согласно документации AutoValue, аннотации абстрактного класса с помощью @GwtCompatible(serializable = true) и реализации serializable должно быть достаточно для использования сгенерированного класса значений в RPC GWT. Тем не менее, с классом ниже я получаю следующую ошибку:

Caused by: com.google.gwt.user.client.rpc.SerializationException: 
Type 'com.my.package.client.types.AutoValue_PersonLocalData' was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded. 
For security purposes, this type will not be serialized.: instance = PersonLocalData{title=Dr., givenName=Philip, familyName=Mortimer}

Я пробовал различные варианты (например, только реализацию обычного Serializable) без успеха. Что не так с классом?

import java.io.Serializable;

import com.google.auto.value.AutoValue;
import com.google.common.annotations.GwtCompatible;
import com.google.gwt.user.client.rpc.IsSerializable;

@AutoValue
@GwtCompatible(serializable = true)
public abstract class PersonLocalData
        implements IsSerializable, Serializable {

    public static final long serialVersionUID = 1L;

    public static PersonLocalData create(
            String title,
            String givenName,
            String familyName) {
        return new AutoValue_PersonLocalData(
                title, givenName, familyName);
    }

    public abstract String getTitle();
    public abstract String getGivenName();
    public abstract String getFamilyName();
}

Gradle файл включает в себя

compile 'com.google.guava:guava:18.0'
compile 'com.google.guava:guava-gwt:18.0'
compile 'com.google.auto.value:auto-value:1.1'

Версия GWT: 2.6.0

1 ответ

GWT и обработка аннотаций - неудобные друзья. Похоже, ключом является разделение обработки аннотаций на обязательный этап. Например, я только что начал работать с Maven, следуя разделу "BoilerplateGeneration maven" в разделе "Группы": отключите обработку аннотаций на этапе компиляции и вместо этого запустите ее как часть generate-sources, чтобы при запуске GWT мог рассматривать их как исходные файлы. Раньше я компилировал свои аннотированные классы в JAR (включая сгенерированный исходный код) и запускал GWT-компиляцию в отдельном проекте, который включает этот JAR. К сожалению, у меня нет специального совета по Gradle.

Другие вопросы по тегам