Firebase при загрузке Spring выдает ошибку во время инициализации

Я пытаюсь настроить Firebase в приложении Spring Boot. Я следую фрагментам кода, приведенным в документации здесь. Вот так выглядит мой помпон:

<dependency>
    <groupId>com.google.firebase</groupId>
    <artifactId>firebase-admin</artifactId>
    <version>5.2.0</version>
</dependency>

Код, который я запускаю для инициализации firebase:

@PostConstruct
    public void init() {
        InputStream serviceAccount = FirebaseConfig.class.getClassLoader().getResourceAsStream(configPath);

        FirebaseOptions options = null;
        try {
            options = new FirebaseOptions.Builder()
                    .setCredential(FirebaseCredentials.fromCertificate(serviceAccount))
                    .setDatabaseUrl(databaseUrl)
                    .build();
        } catch (IOException e) {
            e.printStackTrace();
        }
        FirebaseApp.initializeApp(options);

    }

При запуске FirebaseApp.initializeApp выдает следующую ошибку:

[ОШИБКА] RunLoop: необработанное исключение в цикле выполнения базы данных Firebase (5.2.0). Пожалуйста, сообщите об этом по адресу [email protected] java.lang.NoSuchMethodError: org.json.JSONStringer.object()Lorg/json/JSONWriter; в com.google.firebase.database.util.JsonMapper.serializeJsonValue(JsonMapper.java:72) в com.google.firebase.database.util.JsonMapper.serializeJsonValue(JsonMapper.java:61) в com.google.firebase.database .util.JsonMapper.serializeJson(JsonMapper.java:41)

Я пытался включить org.json, но безуспешно.


person raj    schedule 12.08.2017    source источник
comment
Проверьте дерево зависимостей вашего проекта (mvn dependency:tree) и посмотрите, какие библиотеки JSON доступны в пути к классам. Скорее всего, в проекте есть библиотека open-json, которая конфликтует со старой библиотекой org.json, необходимой для Firebase.   -  person Hiranya Jayathilaka    schedule 13.08.2017
comment
Вам удалось это исправить?   -  person tim    schedule 17.11.2017


Ответы (1)


Не уверен, что нашел ответ, Радж.

Я собирался избавиться от этой ошибки, исключив зависимость, извлеченную процессором конфигурации Spring Boot, и (хотя я больше не видел эту ошибку после исключения только первой) также исключил из начального теста загрузки Spring (если используется):

<project>
  ...
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-configuration-processor</artifactId>
      <version>1.5.8.RELEASE</version>
        <scope>compile</scope>
        <exclusions>
          <exclusion> 
            <groupId>com.vaadin.external.google</groupId>
            <artifactId>android.json</artifactId>
          </exclusion>
        </exclusions> 
      </dependency>
    ...
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <version>1.5.8.RELEASE</version>
        <scope>test</scope>
        <exclusions>
          <exclusion> 
            <groupId>com.vaadin.external.google</groupId>
            <artifactId>android.json</artifactId>
          </exclusion>
        </exclusions> 
      </dependency>
    ...
  </dependencies>
</project>

Обратите внимание: я не тестировал именно этот фрагмент pom, потому что я использую gradle вместо maven, но это должно быть правильно.

Как я нашел это

Прочитав ваш вопрос и другие ответы, я начал изучать потенциальную проблему с классом JSONStringer в пакете org.json. Итак, я подумал о конфликте версий зависимости, которая зависела от «org.json»

Запустив ./gradlew dependencyInsight --dependency org.json, я получил:

org.json:json:20160810 -> 20140107
+--- com.google.cloud:google-cloud-core:1.7.0
|    +--- com.google.cloud:google-cloud-storage:1.7.0
|    |    \--- com.google.firebase:firebase-admin:5.5.0
|    |         \--- compile
|    +--- com.google.cloud:google-cloud-firestore:0.25.0-beta
|    |    \--- com.google.firebase:firebase-admin:5.5.0 (*)
|    +--- com.google.cloud:google-cloud-core-http:1.7.0
|    |    +--- com.google.cloud:google-cloud-storage:1.7.0 (*)
|    |    \--- com.google.cloud:google-cloud-firestore:0.25.0-beta (*)
|    \--- com.google.cloud:google-cloud-core-grpc:1.7.0
|         \--- com.google.cloud:google-cloud-firestore:0.25.0-beta (*)
\--- com.google.firebase:firebase-admin:5.5.0 (*)

(*) - dependencies omitted (listed previously)

поэтому только зависимости Google использовали этот пакет. Я подозревал, что проблема не в конфликте версий в зависимостях Google, поэтому я искал конфликты, которые Spring может иметь с пакетом org.json.

Поиск в Google «Spring boot org.json» привел меня к проблеме Github о конфликтах с библиотекой json. В проблеме упоминалось, что для spring-boot-starter-test, поскольку «требуется org.skyscreamer:jsonassert:1.4.0, исключите com.vaadin.external.google:android-json:0.0.20131108.vaadin1».

Отсюда я запустил: `./gradlew dependencyInsight --dependency 'com.vaadin.external.google', который ссылался на 'spring-boot-configuration-processor'.

person Julio C Villalta III    schedule 19.11.2017
comment
Да, ты прав. После исключения других библиотек все заработало нормально - person raj; 22.11.2017