java.util.zip.zipException при создании проекта NativeScript - PullRequest
0 голосов
/ 23 октября 2018

Я получаю java.util.zip.ZipException при подготовке проекта NativeScript для Android (tns prepare android):

Failed to build plugin nativescript-barcodescanner : 
Error: Command ./gradlew failed with exit code 1 Error output: 
 Exception in thread "main" java.util.zip.ZipException: zip END header not found

Эта ошибка возникает только в том случае, если некоторые плагины (nativescript-barcodescanner и nativescript-socket.io)) установлены.Если я пытаюсь собрать без этих плагинов, сборка работает правильно.Так что, вероятно, это не проблема самого Gradle (как, например, этот ответ ).

Первое вхождение

Впервые я столкнулся с проблемой с nativescript-barcodescanner после обновления NativeScript изверсия 3.2.0 до 4.2.4 и последующее обновление пакетов моего проекта.До обновления все работало нормально.

Однако проблема не связана с моим проектом.Если я создаю новый проект и добавляю nativescript-barcodescanner

$ tns create testproject && cd testproject
$ tns plugin add nativescript-barcodescanner
$ tns prepare android

..., тогда ошибка снова появляется.Когда я tns remove nativescript-barcodescanner, сборка выполняется правильно.

Шаги сделаны

Сначала я подумал, что это проблема с плагином nativescript-barcodescanner ( - вот моя проблема с GitHub ).Однако теперь я столкнулся с той же ошибкой с шаблоном NativeScript-Vue, когда сборка не удалась на nativescript-socket.io.

. Я безуспешно попытался выполнить следующие шаги:

  • Удаление node_modules и повторное выполнение npm install
  • Очистка кэша npm (~/.npm/_cacache) и повторная загрузка всех зависимостей
  • Создание нового проекта NativeScript (проблема возвращается, когда я tns add плагин)
  • Удаление плагина и установка более старой версии
  • Переустановка NativeScript (npm i -g nativescript)
  • Удаление папки кэша Gradle (~/.gradle/caches)и повторная попытка сборки
  • Использование более новой версии Java (OpenJDK 11 вместо 8)

Мое (текущее) предположение состоит в том, что какой-то файл был неправильно загружен.Это весьма вероятно, потому что мое интернет-соединение не очень хорошее и, возможно, было отключено в середине.Однако я не могу разобрать , какой файл вызывает проблемы (я бы не стал перезагружать все настройки).

Полный вывод

Вот мойИнформация по настройке NativeScript:

$ tns info
✔ Getting NativeScript components versions information...
✔ Component nativescript has 4.2.4 version and is up to date.
✔ Component tns-core-modules has 4.2.1 version and is up to date.
✔ Component tns-android has 4.2.0 version and is up to date.
✔ Component tns-ios has 4.2.0 version and is up to date.

И это примерный прогон (это было с OpenJDK 8, поэтому вместо 10 * zip END header not found было указано error opening zip file):

$ tns create bartest
npm notice created a lockfile as package-lock.json. You should commit this file.
added 3 packages in 295.509s
Project bartest was successfully created.

$ cd bartest
$ tns plugin add nativescript-barcodescanner
+ nativescript-barcodescanner@2.7.8
added 1 package in 97.781s
Successfully installed plugin nativescript-barcodescanner.

$ tns prepare android
Copying template files...
Platform android successfully added. v4.2.0
Preparing project...
Successfully prepared plugin nativescript-barcodescanner for android.
Successfully prepared plugin nativescript-theme-core for android.
Successfully prepared plugin tns-core-modules for android.
Successfully prepared plugin tns-core-modules-widgets for android.
Failed to build plugin nativescript-barcodescanner : 
Error: Command ./gradlew failed with exit code 1 Error output: 
 Exception in thread "main" java.util.zip.ZipException: error in opening zip file
  at java.util.zip.ZipFile.open(Native Method)
  at java.util.zip.ZipFile.<init>(ZipFile.java:225)
  at java.util.zip.ZipFile.<init>(ZipFile.java:155)
  at java.util.zip.ZipFile.<init>(ZipFile.java:169)
  at org.gradle.wrapper.Install.unzip(Install.java:215)
  at org.gradle.wrapper.Install.access$600(Install.java:27)
  at org.gradle.wrapper.Install$1.call(Install.java:75)
  at org.gradle.wrapper.Install$1.call(Install.java:48)
  at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:69)
  at org.gradle.wrapper.Install.createDist(Install.java:48)
  at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:107)
    at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61)

Есть ли способ выяснить, какой zip-файл вызывает ошибку, или каким-либо другим способом я могу попытаться отладить эту проблему?

1 Ответ

0 голосов
/ 25 октября 2018

TL; DR: Один из zip-файлов в моем ~/.gradle был неисправен.Повторная загрузка файла решила проблему.

Моя ошибка в рассуждениях была такой:

Эта ошибка, кажется, происходит, только когда определенные плагины (nativescript-barcodescanner и nativescript-socket.ио) установлены.Если я пытаюсь собрать без этих плагинов, сборка работает правильно.Так что, вероятно, это не проблема самого Gradle (как, например, в этом ответе ).

Тот факт, что некоторые сборки работают , не обязательно подразумевает , что Gradleнастроен правильно.NativeScript, похоже, использует разные версии для разных задач (в моем случае gradle-4.4-bin для сборок плагинов, но gradle-4.4-all для сборок полного проекта).Если только версия сборки проекта является дефектной, сборки будут работать для некоторых установок, но завершатся неудачно, когда потребуется сборка плагина.

Решения

Быстрое решение: Удалите~/.gradle и выполните команду сборки снова (как описано в этой проблеме GitHub ).

Более медленное решение: Чтобы избежать повторной загрузки всей установки, посмотритечерез файлы gradle-*.zip, расположенные в ~/.gradle/wrapper/dists, и выясните, какой из них неисправен (что, вероятно, означает, что он не был загружен должным образом).Файлы будут именоваться примерно так (как в моем случае) так:

~/.gradle/wrapper/dists/gradle-4.4-bin/bgaq7vklkazwgxox0hdadxbvi/gradle-4.4-bin.zip

Чтобы проверить наличие дефектных почтовых индексов, сравните размер файла и / или sha-sum с в этом списке рассылки Gradle , Простого открытия .zip недостаточно для тестирования , потому что многие файловые менеджеры открывают частично загруженные / неполные zip-файлы без жалоб.

Как только вы обнаружите неисправный файл, удалите его и снова запуститекоманда tns build.Он автоматически загрузит отсутствующий файл и продолжит сборку.Кроме того, вы можете вручную загрузить файл по указанной выше ссылке и поместить его в правильный каталог.

...