当前位置: 首页 > 知识库问答 >
问题:

Firebase管理SDK-java.lang.NoClassDefoundError

贡正诚
2023-03-14

我试图将Firebase Admin SDK添加到我的Java Web应用程序中,但在init上出现以下错误:

java.lang.NoClassDefFoundError: com/google/firebase/FirebaseOptions
        at backend.servlets.Init.contextInitialized(Init.java:33)

我将Firebase依赖项添加到pom.xml文件中,并使用以下代码初始化Firebase:ClassLoader ClassLoader=Thread.currentThread().GetContextClassLoader();InputStream为=ClassLoader.GetResourceStream(“ServiceAccount.json”);

    FirebaseOptions options = null;
    try {
        options = FirebaseOptions.builder()
                .setCredentials(GoogleCredentials.fromStream(is))
                .build();
    } catch (IOException e) {
        e.printStackTrace();
    }

    FirebaseApp.initializeApp(options);+

有人能帮我吗?

共有1个答案

宇文航
2023-03-14

这里有一个您可以使用的实现;

您可能需要使用@PostConstruct注释。

引用-为什么使用@PostConstruct?

建议的实施

package com.test.config;

import java.io.FileInputStream;

import javax.annotation.PostConstruct;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.ResourceUtils;

import com.google.auth.oauth2.GoogleCredentials;
import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;
import com.google.firebase.messaging.FirebaseMessaging;

@Configuration
public class FirebaseConfig {

    @Bean
    public FirebaseMessaging firebaseMessaging() {
        FirebaseMessaging firebase = FirebaseMessaging.getInstance();
        return firebase;
    }

    @PostConstruct
    public void init() {

        try (FileInputStream serviceAccount = new FileInputStream(
                ResourceUtils.getFile("classpath:ServiceAccount.json"));) {

            @SuppressWarnings("deprecation")
            FirebaseOptions options = new FirebaseOptions.Builder()
                    .setCredentials(GoogleCredentials.fromStream(serviceAccount)).build();
            if (FirebaseApp.getApps().isEmpty()) {
                FirebaseApp.initializeApp(options);
            }

            System.out.println("#####Firebase Initialized#####");

        } catch (Exception e) {
            System.out.println(e.getMessage());
        }

    }

}
 类似资料:
  • 我试图初始化管理SDK,但在服务号初始化中面临400个坏请求。它在我的开发窗口环境中工作得很好,但是当我在linux中部署时,我面临着这个问题。 我正在从属性文件读取文件路径。 我当时正试图发送推送通知,当时我正面临问题。 查出

  • 在firebase storage的web sdk中,您可以从Blob数据上载图像。我有一个nodeJS应用程序,想将blob数据中的图像上传到我的存储桶中。在文档中,如果运行节点服务器环境,建议使用AdminSDK。但我在firbase存储管理文档中找不到此功能。 这是我的密码:

  • Firebase Admin SDK文档清楚地说明,服务帐户对存储帐户具有完全的范围控制,但由于传输令牌源为nil,因此正确引导凭据似乎有些错误。

  • 我试图从我的移动混合应用程序(离子3)发送一张图片到我的Heroku后端(Node.js),并让后端将图片上传到Firebase存储,并将新上传的fil下载url返回到移动应用程序。 上载成功,但当我转到Firebase存储控制台时,当我试图显示图片的预览时出现错误,下载时无法从计算机打开它。我想这是一个编码的东西...? 如何检索新上传的文件下载url?我希望在中返回一个对象,就像在函数中一样,

  • 根据文档,我必须把文件名传递给函数才能上传一个文件。 我想能做这样的事

  • 我试图在我的函数文件夹中初始化Firebase admin sdk,以便我的云函数可以通过管理员读/写访问访问我的数据库,但是当我试图部署我的函数时,会返回以下错误 错误:错误分析触发器:找不到模块'/serviceKey'。json' 我曾尝试在functions目录中运行npm安装,但没有任何帮助。 这是我的包裹。json文件 这是我的index.js档案