Spring 引导中的 Firebase 在初始化期间出错
Firebase in Spring boot gives error during initalization
我正在尝试在 Spring 启动应用程序中设置 Firebase。我遵循文档 here 中给出的代码片段。这是我的 pom 的样子:
<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
抛出以下错误:
[ERROR] RunLoop: Uncaught exception in Firebase Database runloop
(5.2.0). Please report to firebase-database-client@google.com
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
但没有成功。
不确定你是否找到了答案 Raj
我正要通过排除由 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,但这应该是正确的。
我是怎么找到这个的
阅读您的问题和其他答案后,我开始调查 'org.json' 包中 class 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)
所以只有 google 依赖项在使用这个包。我怀疑问题不是 google 依赖项中的版本冲突,所以我寻找 Spring 可能与 org.json 包的冲突。
Google 搜索 'Spring boot org.json' 使我找到 关于与 json 库的冲突。该问题提到对于 spring-boot-starter-test 自 "org.skyscreamer:jsonassert:1.4.0 is required, exclude com.vaadin.external.google:android-json:0.0.20131108.vaadin1."
据此,我 运行: `./gradlew dependencyInsight --dependency 'com.vaadin.external.google' 引用了 'spring-boot-configuration-processor'.
我正在尝试在 Spring 启动应用程序中设置 Firebase。我遵循文档 here 中给出的代码片段。这是我的 pom 的样子:
<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
抛出以下错误:
[ERROR] RunLoop: Uncaught exception in Firebase Database runloop (5.2.0). Please report to firebase-database-client@google.com 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
但没有成功。
不确定你是否找到了答案 Raj
我正要通过排除由 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,但这应该是正确的。
我是怎么找到这个的
阅读您的问题和其他答案后,我开始调查 'org.json' 包中 class 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)
所以只有 google 依赖项在使用这个包。我怀疑问题不是 google 依赖项中的版本冲突,所以我寻找 Spring 可能与 org.json 包的冲突。
Google 搜索 'Spring boot org.json' 使我找到
据此,我 运行: `./gradlew dependencyInsight --dependency 'com.vaadin.external.google' 引用了 'spring-boot-configuration-processor'.