#kotlin #avro
Вопрос:
Выполняется
val myAvroObject = MyAvroObject.newBuilder()
приводит к ошибке компиляции:
Cannot access class 'MyAvroObject.Builder'. Check your module classpath for missing or conflicting dependencies
Я могу получить доступ к другим MyAvroObject
переменным. Точнее, такие методы, как
val schema = MyAvroObject.getClassSchema() val decoder = MyAvroObject.getDecoder()
отлично компилируется. Что делает это еще более странным, так это то, что я могу получить доступ newBuilder()
в своей test/
папке, но не в своей src/
папке.
Почему я получаю ошибку компиляции при использовании newBuilder()
? Имеет ли значение пространство имен avro-схемы, используемое для генерации MyAvroObject
?
Ответ №1:
Check your module classpath
обычно это означает, что ваши зависимости (которые вы не предоставили) перепутались. Один из них должен читать implementation
вместо testImplementation
, чтобы метод был доступен в main
исходном наборе, а не только в test
исходном наборе, но это вполне может быть связано с входными классами, расположением вывода сгенерированных классов или аннотациями @VisibleForTesting
(просто посмотрите, что он даже генерирует). Команда gradlew
также может перечислить зависимости для каждой конфигурации. Строитель, кажется, называется org.apache.avro.SchemaBuilder
… есть только avro-1.11.0.jar
amp; avro-tools-1.11.0.jar
. С помощью шаблона проектирования «конструктор» .newBuilder()
пытается вернуть внутренний класс Builder
.