在 gradle 中使用 Firebase 数据库

Use Firebase Database in gradle

我正在尝试制作一个 gradle 脚本来上传一些使用 firebase 构建的数据。但是我从 Firebase Java Admin SDK 收到了一个奇怪的错误:-

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)
    }
}

我在尝试申请 运行 任务时遇到错误。

更新

这是我的插件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'
    }
}

您的运行时环境正在选择与 Firebase SDK 不兼容的另一个版本的 org.json:json 库。您需要确保它使用正确版本的 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) {
}

我在 repo 目录中有包含已编译任务的 jar。我将您的任务实现放入 src/main/groovy/net/hkj/UploadTask.groovy 文件中,并将输出编译到 repo 目录中,然后再调用问候任务。