2017-08-12 44 views
1

我試圖在Spring Boot應用程序中設置Firebase。我正在關注文檔here中給出的代碼片段。這是我的聚甲醛的樣子:Firebase在Spring啓動過程中出現錯誤信息

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

,我運行初始化代碼火力點:

@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拋出以下錯誤:

[ERROR] RunLoop: Uncaught exception in Firebase Database runloop (5.2.0). Please report to [email protected] java.lang.NoSuchMethodError: org.json.JSONStringer.object()Lorg/json/JSONWriter; at com.google.firebase.database.util.JsonMapper.serializeJsonValue(JsonMapper.java:72) at com.google.firebase.database.util.JsonMapper.serializeJsonValue(JsonMapper.java:61) at com.google.firebase.database.util.JsonMapper.serializeJson(JsonMapper.java:41)

我曾嘗試包括org.json但沒有運氣。

+1

檢查項目的依賴關係樹('mvn dependency:tree')並查看類路徑中可用的JSON庫。項目中有一個open-json庫,與Firebase所需的舊org.json庫衝突。 –

+0

您是否設法修復它? – tim

回答

1

不知道,如果你找到了答案拉吉

我剛要排除的依賴由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> 

請注意:因爲我使用gradle這個不是行家我的天堂沒有測試過這個確切的POM片段,但是這應該是正確的。

我怎麼發現這個

閱讀你的問題,其他的答案,我開始在包「org.json」尋找到潛在的問題與班級JSONStringer。所以我在想,依靠「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) 

所以只有谷歌的依賴都採用這種封裝形式。我懷疑這個問題不是谷歌依賴關係中的版本衝突,所以我尋找了Spring可能與org.json派生的衝突。

谷歌搜索'Spring boot org.json'導致我與有關與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'。

+0

是的,你是對的。一旦其他圖書館被排除在外,它工作得很好 – raj