微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java.lang.NoSuchMethodError 通过管理 SDK Java 初始化 firebase 时

如何解决java.lang.NoSuchMethodError 通过管理 SDK Java 初始化 firebase 时

我正在尝试通过 Firebase 管理 SDK 连接到 Firestore。但是,当我打电话时:

 FirebaSEOptions options = new FirebaSEOptions.Builder()
            .setCredentials(GoogleCredentials.fromStream(serviceAccount))
            .build();
    
    FirebaseApp.initializeApp(options);

我收到以下异常:java.lang.NoSuchMethodError: 'void com.google.common.base.Preconditions.checkArgument(boolean,java.lang.String,java.lang.Object)'

我只在通过 jar 文件运行程序时遇到此异常,通过 NetBeans 编译时它运行良好。我在网上阅读,似乎是 firebase admin SDK 版本的问题,但我不确定要使用哪个版本,并尝试了多个版本并出现相同的错误

也许是我在 jar 文件中捆绑依赖项的方式有误?

这是我的 build.gradle 文件

apply plugin: 'java'
apply plugin: 'jacoco'
apply plugin: 'application'


mainClassName = 'QMPAngola.Main'

repositories {
    jcenter()
}

dependencies {
    compile 'com.google.firebase:firebase-admin:5.9.0'
    testCompile 'junit:junit:4.12'
}

configurations.all {
    resolutionStrategy {
        force 'com.google.guava:guava:30.1.1-jre'
    }
}

jar {
    manifest {
        attributes "Main-Class": "QMPAngola.Main"
    }
    
    from { (configurations.runtime).collect {it.isDirectory() ? it : zipTree(it)} } 
   
}

这是完整的堆栈跟踪:

Exception in thread "AWT-EventQueue-0" java.lang.NoSuchMethodError: 'void com.google.common.base.Preconditions.checkArgument(boolean,java.lang.Object)'                         
        at com.google.cloud.firestore.Query$ComparisonFilter.<init>(Query.java:137)                                                                                                                
        at com.google.cloud.firestore.Query.whereEqualTo(Query.java:423)                                                                                                                           
        at com.google.cloud.firestore.Query.whereEqualTo(Query.java:401)                                                                                                                           
        at QMPAngola.firebaseui.driverStart(firebaseui.java:315)                                                                                                                                   
        at QMPAngola.firebaseui.<init>(firebaseui.java:51)                                                                                                                                         
        at QMPAngola.Main$1.run(Main.java:36)                                                                                                                                                      
        at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)                                                                                                          
        at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)                                                                                                                 
        at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)                                                                                                                             
        at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)                                                                                                                             
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)                                                                                                        
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)                                                                       
        at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)                                                                                                                     
        at java.desktop/java.awt.EventdispatchThread.pumpOneEventForFilters(EventdispatchThread.java:203)                                                                                          
        at java.desktop/java.awt.EventdispatchThread.pumpEventsForFilter(EventdispatchThread.java:124)                                                                                             
        at java.desktop/java.awt.EventdispatchThread.pumpEventsForHierarchy(EventdispatchThread.java:113)                                                                                          
        at java.desktop/java.awt.EventdispatchThread.pumpEvents(EventdispatchThread.java:109)                                                                                                      
        at java.desktop/java.awt.EventdispatchThread.pumpEvents(EventdispatchThread.java:101)                                                                                                      
        at java.desktop/java.awt.EventdispatchThread.run(EventdispatchThread.java:90)   

解决方法

据我所知,com.google.firebase:firebase-admin 使用 guava 作为依赖项。

根据我的理解,您通过

覆盖了对番石榴的传递依赖
configurations.all {
    resolutionStrategy {
        force 'com.google.guava:guava:30.1.1-jre'
    }
}

版本不兼容。

我想说你应该删除那个块,或者你有什么理由添加它?

,

在无法调试的情况下,我的第一个假设是配置的可用性,'serviceAccount' 是否以预期格式返回值?

第二个猜测是我注意到您使用的是 FirebaseApp 而不是 admin 您完全有可能将错误的模块用于错误的凭据。

最后,模块中可能的版本不匹配,例如安装在较新版本中的 FirebaseCore 等。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?