构建NativeScript项目时发生java.util.zip.zipException

时间:2018-10-23 11:13:33

标签: java android nativescript gradlew

在为Android(java.util.zip.ZipException)准备我的NativeScript项目时,我得到了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-barcodescannernativescript-socket.io)时,才会出现此错误。如果我尝试在没有这些插件的情况下进行构建,则该构建可以正常进行。因此,Gradle本身可能不是问题(例如this answer)。

首次出现

在将NativeScript从版本nativescript-barcodescanner升级到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插件(here is my GitHub issue)有问题。但是,我现在遇到了与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)

我(当前)的猜测是某些文件已被错误下载。这很可能是因为我的Internet连接不是很好,并且可能在中间断开了连接。但是,我无法确定哪个文件引起了麻烦(我宁愿不重新下载整个设置)。

完整输出

这是我的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中进行的,因此它显示为error opening zip file,而不是更详细的zip END header not found):

$ 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 :(得分:0)

TL; DR:我的~/.gradle中的一个zip文件有问题。重新下载文件即可解决问题。

我的推理错误是这样的:

  

此错误似乎仅在某些插件时才会发生   (nativescript-barcodescanner和nativescript-socket.io)是   已安装。如果我尝试在没有这些插件的情况下进行构建,则可以进行构建   正确地。因此,Gradle本身可能不是问题(例如   例如this answer)。

某些构建工作的事实不一定暗示。Gradle的设置正确。 NativeScript似乎对不同的任务使用不同的版本(在我的情况下,gradle-4.4-bin用于插件构建,而gradle-4.4-all用于完整项目构建)。如果只有项目构建版本有问题,则该构建将可用于某些设置,但在需要插件构建时也会失败。

解决方案

快速解决方案:删除~/.gradle文件夹,然后再次运行build命令(如this GitHub issue中所述)。

较慢的解决方案::为避免重新下载整个设置,请浏览位于gradle-*.zip的{​​{1}}文件,找出哪个是有问题的(可能是哪个)表示未正确下载)。这些文件将被命名为(例如):

~/.gradle/wrapper/dists

要检查错误的zip,请将文件大小和/或sha-sum与this Gradle Distribution List进行比较。 仅打开~/.gradle/wrapper/dists/gradle-4.4-bin/bgaq7vklkazwgxox0hdadxbvi/gradle-4.4-bin.zip 尚不足以进行测试,因为许多文件管理器都会打开未完全下载的部分下载/不完整的zip文件。

一旦找到错误的文件,请将其删除并重新运行.zip命令。它将自动下载丢失的文件并继续构建。或者,您可以从上面的链接手动下载文件,并将其放置在正确的目录中。