Проблема с зависимостями Firestore при экспорте jar с использованием Gradle - PullRequest
0 голосов
/ 14 мая 2019

Я создаю приложение в Eclipse, используя Gradle. Когда я тестирую приложение, запустив его из Eclipse, все работает так, как должно - однако, когда я пытаюсь экспортировать и запускать файл .jar, я получаю следующую ошибку:

Failed for: .\ServiceAccountKey.json (The system cannot find the file specified)
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/firebase/cloud/FirestoreClient
    at main.Main.getSuroviny(Main.java:105)
    at main.Main.main(Main.java:39)
Caused by: java.lang.ClassNotFoundException:     com.google.firebase.cloud.FirestoreClient
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)

Мой файл build.gradle выглядит следующим образом:

apply plugin: 'java-library'
apply plugin: 'java'

// In this section you declare where to find the dependencies of your project
repositories {
    // Use jcenter for resolving your dependencies.
    // You can declare any Maven/Ivy/file repository here.
    jcenter()
    google()
}

dependencies {
    // This dependency is exported to consumers, that is to say found on their compile classpath.
    api 'org.apache.commons:commons-math3:3.6.1'

    // This dependency is used internally, and not exposed to consumers on their     own compile classpath.
    implementation 'com.google.guava:guava:23.0'
    implementation 'com.google.firebase:firebase-admin:5.8.0'
    implementation 'com.google.gms:google-services:4.0.1'

    implementation 'com.google.firebase:firebase-core:16.0.6'
    //dependency for using firebase database
    implementation 'com.google.firebase:firebase-database:16.0.6'
    //dependency for email and password authentication
    implementation 'com.google.firebase:firebase-auth:16.1.0'
    //dependency for cloud storage
    implementation 'com.google.firebase:firebase-storage:16.0.5'
    implementation 'com.google.firebase:firebase-firestore:18.0.0'

    // Use JUnit test framework
    testImplementation 'junit:junit:4.12'
}


// Include dependent libraries in archive.

jar {
  manifest { 
    attributes "Main-Class": "main.Main"
  }  

  from {
    configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
  }
}

Я дважды проверил все операции импорта и реализации, кажется, все правильно, основываясь на информации, которую мне удалось найти в документации Firestore.

Кроме того, я уже пытался поэкспериментировать с несколькими вещами: ошибка изменяется при первом обнаруженном им первом методе - это DocumentReference, FirestoreClient или что-то еще.

Спасибо всем, кто заранее порекомендовал.

1 Ответ

0 голосов
/ 14 мая 2019

В конце концов, ошибка была моей ошибкой - мой .jar не включал служебный ключ, необходимый для загрузки экземпляра Firestore (по какой-то причине я ожидал, что eclipse включит его при экспорте файла jar, работающего под управлением, так как у меня естьпроверил опцию «Включить файлы ресурсов в пакет».

Поэтому я включил JSON-файл служебного ключа в ту же папку, где находится мой .jar-файл, поэтому я могу читать его в зависимости от местоположения файла.

Это не совсем элегантный обходной путь, но пока этого достаточно.

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