Java Spring引导中的Firebase在初始化过程中出错
我正在尝试在Spring Boot应用程序中设置Firebase。我将遵循文档中给出的代码片段。以下是我的pom的外观:Java Spring引导中的Firebase在初始化过程中出错,java,firebase,spring-boot,firebase-realtime-database,firebase-admin,Java,Firebase,Spring Boot,Firebase Realtime Database,Firebase Admin,我正在尝试在Spring Boot应用程序中设置Firebase。我将遵循文档中给出的代码片段。以下是我的pom的外观: <dependency> <groupId>com.google.firebase</groupId> <artifactId>firebase-admin</artifactId> <version>5.2.0</version> </dependency>
<dependency>
<groupId>com.google.firebase</groupId>
<artifactId>firebase-admin</artifactId>
<version>5.2.0</version>
</dependency>
启动时FirebaseApp.initializeApp
抛出以下错误:
[错误]RunLoop:Firebase数据库RunLoop中出现未捕获异常
(5.2.0). 请向firebase数据库报告-client@google.com
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.SerializedJSonValue(JsonMapper.java:61)
在
com.google.firebase.database.util.JsonMapper.serializeJson(JsonMapper.java:41)
我试着加入
org.json
,但运气不好。不确定你是否找到了答案
我打算通过排除Spring Boot的配置处理器拉入的依赖项来消除这个错误,并且(尽管在排除第一个之后我再也看不到这个错误)也从Spring Boot starter测试中排除(如果使用):
因此,只有谷歌依赖使用这个软件包。我怀疑这个问题不是google Dependences中的版本冲突,所以我寻找Spring可能与org.json包存在的冲突
谷歌搜索“springboot org.json”让我想到了一个关于与json库冲突的问题。该问题提到,对于spring启动测试,因为“org.skyshrayer: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'。检查项目的依赖关系树(
mvn dependency:tree
),看看类路径中有哪些JSON库可用。项目中可能有一个开放的json库,它与Firebase所需的旧org.json库冲突。您是否设法修复了它?是的,您是对的。一旦其他库被排除在外,它就可以正常工作了
@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);
}
<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>
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)