Экспорт FireBase с Gradle (RealTime DataBase) - PullRequest
1 голос
/ 09 апреля 2020

Я хочу экспортировать свой проект firebase в jar, и когда я пытаюсь использовать jar, он не работает.

Мой build.gradle:

apply plugin: "java"

buildscript {
    ext.bukkit_version = "1.8.3-R0.1-SNAPSHOT"
}

repositories {
    mavenCentral()
    maven {
        url "https://hub.spigotmc.org/nexus/content/repositories/snapshots/"
    }
}

version = "0.1"
sourceCompatibility = "1.8"
targetCompatibility = "1.8"

configurations {
    shade
    compile.extendsFrom shade
}

dependencies {
    compile "org.bukkit:bukkit:$bukkit_version"
    shade 'com.google.firebase:firebase-admin:6.12.2'
}

jar {
    configurations.shade.each { dep ->
        from(project.zipTree(dep)) {
            exclude 'META-INF', 'META-INF/**'
        }
    }
}

Я использую это код для проверки в чем проблема:

public static void main(String[] args) throws IOException, InterruptedException {
    System.out.println(1);
    FirebaseOptions options = new FirebaseOptions.Builder()
        .setCredentials(GoogleCredentials.fromStream(new FileInputStream(new File("../yourpixel/YourPixel/key.json"))))
        .setDatabaseUrl("https://yourpixel-22c2a.firebaseio.com/")
        .build();
    System.out.println(2);
    FirebaseApp.initializeApp(options);
    System.out.println(3);
    CountDownLatch latch = new CountDownLatch(1);
    FirebaseDatabase.getInstance().getReference("TEST").setValue("2", (databaseError, databaseReference) -> {
        System.out.println("Error:" + (databaseError == null ? "null" : databaseError.getMessage()));
        System.out.println("Reference:" + (databaseReference == null ? "null" : databaseReference.getPath()));
        latch.countDown();
    });
    System.out.println(4);
    latch.await();
    System.out.println(5);
}

Когда я запускаю это внутри своего проекта, он работает, и вывод:

1
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
2
3
4
Error:null
Reference:/TEST

Когда я экспортирую свой проект в jar и использую это запустить тот же основной, он не работает. Вывод:

1
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
2
3
4

И программа застряла.

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Это очень плохая идея в любой программе:

while (true);

Это называется жестким l oop, и это полностью увеличит ЦП на 1013 * нить, где вы запускаете это. А поскольку обработчик завершения для setValue также должен запускаться в этом потоке, он никогда не сможет выполняться.

Чтобы должным образом ожидать записи данных, вы захотите использовать семафоры для сигнализации, когда написание сделано. Например, с CountdownLatch:

public static void main(String[] args) throws IOException {
    FirebaseOptions options = new FirebaseOptions.Builder()
        .setCredentials(GoogleCredentials.fromStream(new FileInputStream(new File("key.json"))))
        .setDatabaseUrl("https://yourpixel-22c2a.firebaseio.com/")
        .build();

    FirebaseApp.initializeApp(options);
    CountDownLatch latch = new CountDownLatch(1);

    FirebaseDatabase.getInstance().getReference("TEST").setValue("2", (databaseError, databaseReference) -> {
        latch.countDown();
    });

    latch.await();
}
0 голосов
/ 14 апреля 2020

Я исправил свой проблам. (Я не сказал, что я использую intellij). Проблема заключалась в том, что у проекта, в котором используется jar, был joter jar. я перетащил FireBase.jar (банку, которую я сделал) поверх craftbukkit (как на картинке), и он исправил это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...