1

我正在嘗試使用gradle腳本來上傳一些與firebase一起構建的數據。但我從火力地堡的Java SDK管理得到一個奇怪的錯誤: -在gradle中使用Firebase數據庫

Caused by: java.lang.NoSuchMethodError: org.json.JSONObject.<init>(Ljava/lang/String;)V 
    at com.google.firebase.auth.FirebaseCredentials$CertCredential.<init>(FirebaseCredentials.java:273) 
    at com.google.firebase.auth.FirebaseCredentials.fromCertificate(FirebaseCredentials.java:156) 
    at com.google.firebase.auth.FirebaseCredentials.fromCertificate(FirebaseCredentials.java:130) 
    at com.google.firebase.auth.FirebaseCredentials$fromCertificate.call(Unknown Source) 
    at eu.long1.jwnotes.gradleplugins.UploadTask.action(UploadTask.groovy:31) 

任務這是這樣的:

class UploadTask extends DefaultTask { 

    String message = "Huray!" 

    @TaskAction 
    def action() { 

     String a = "private-key" 

     FirebaseOptions options = new FirebaseOptions.Builder() 
       .setCredential(FirebaseCredentials.fromCertificate(new ByteArrayInputStream(a.getBytes("UTF-8")))) 
       .setDatabaseUrl("https://jwnotes.firebaseio.com/") 
       .build() 

     FirebaseApp.initializeApp(options) 


     FirebaseDatabase.getInstance().getReference().child("alfa-gradle").setValue(message) 
    } 
} 

我收到的時候我嘗試應用到錯誤運行任務。

UPDATE

這是我的Gradle插件文件:

plugins { 
    id 'groovy' 
    id 'maven' 
} 

group 'eu.long1.jwnotes.gradleplugins' 
version '1.0-SNAPSHOT' 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile gradleApi() 
    compile localGroovy() 
} 

dependencies { 
    compile 'com.google.firebase:firebase-admin:5.3.1' 
    compile 'org.json:json:20160810' 

} 

sourceCompatibility = 1.8 

jar { 
    into('lib') { 
     from 'lib' 
    } 
} 

回答

2

你的運行環境正逐步回升org.json:json庫,不與火力地堡SDK兼容的另一個版本。您需要確保它使用正確版本的json library。這通常需要檢查依賴關係樹,並對某些不必要的依賴項進行顯式排除。

更新

繼爲我工作:

buildscript { 
    repositories { 
     maven { 
      mavenCentral() 
      url uri('repo') 
     } 
    } 
    dependencies { 
     classpath group: 'net.hkj', name: 'gradle-task', 
        version: '1.0-SNAPSHOT' 
    } 
    dependencies { 
     classpath 'com.google.firebase:firebase-admin:5.3.1' 
    } 
} 

task greeting(type: net.hkj.UploadTask) { 
} 

我有一個包含在回購目錄編制任務的罐子。我將你的任務實現放到src/main/groovy/net/hkj/UploadTask.groovy文件中,並在調用問候任務之前將輸出編譯到repo目錄中。

+0

我想過,但我仍然得到同樣的錯誤。我的事件試圖建立到插件jar的依賴。 –

+0

那麼,版本20160810中的方法[絕對存在](https://github.com/stleary/JSON-java/blob/20160810/JSONObject.java#L318)。所以這是Gradle沒有拿起正確的依賴關係。如果你放棄對'org.json:json'的顯式依賴? –

+0

最後我使用了REST API。 –