在为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-barcodescanner
和nativescript-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/_cacache
)并重新下载所有依赖项tns add
插件时问题又出现了)npm i -g nativescript
)~/.gradle/caches
),然后重试构建我(当前)的猜测是某些文件已被错误下载。这很可能是因为我的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文件,或者可以尝试调试此问题的其他方式?
答案 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
命令。它将自动下载丢失的文件并继续构建。或者,您可以从上面的链接手动下载文件,并将其放置在正确的目录中。