执行WekaDeeplearning4j构建时遇GradleException:无法创建ZIP文件
:jar任务失败的Windows路径问题 看起来你在构建wekaDeeplearning4j时碰到了Windows环境下Jar打包的典型路径问题——这个错误我之前帮不少开发者排查过,核心问题基本都和Windows的路径限制、字符支持或者权限有关,给你几个针对性的解决方案:
1. 迁移项目到纯ASCII路径目录
你的项目路径包含Nikiforos这个用户名,虽然看起来是常规字符,但Windows的部分工具对非英语系字符(哪怕是拉丁字母变体)的路径支持有兼容性问题,尤其是旧版Gradle。建议把项目克隆到一个更简单的路径下,比如:
$ git clone https://github.com/Waikato/wekaDeeplearning4j.git C:\git\wekaDeeplearning4j $ cd C:\git\wekaDeeplearning4j $ ./gradlew clean build -x test publishToMavenLocal
2. 升级Gradle版本到稳定版
有些旧版Gradle在Windows下处理Jar打包时存在路径相关的bug,你可以检查项目根目录下gradle/wrapper/gradle-wrapper.properties里的distributionUrl,把它替换成最新的稳定版(比如8.5版本):
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
修改后重新运行构建命令,Gradle会自动下载新版并使用。
3. 检查权限与目录存在性
- 先手动创建
build/libs目录:mkdir C:\Users\Nikiforos\git\wekaDeeplearning4j\build\libs,确保当前用户有读写权限 - 右键以管理员身份打开命令提示符/PowerShell,再执行构建命令,避免Windows权限拦截文件创建
4. 启用Windows长路径支持
如果项目里存在深层嵌套的文件路径,超过了Windows默认的260字符限制,也会导致创建Jar失败:
- 按下
Win+R输入regedit打开注册表编辑器 - 导航到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem - 找到
LongPathsEnabled(没有的话新建一个DWORD(32位)值),设置值为1 - 重启电脑后重新执行构建
5. 排查资源文件问题
有时候src/main/resources下的文件名字包含特殊字符(比如空格、中文、希腊字母等),会导致Jar打包失败。你可以先执行:
$ ./gradlew clean jar --debug
查看debug日志里的具体报错位置,定位到有问题的资源文件后重命名即可。
附你提供的完整错误日志:
Task :compileJava
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Task :processResources
Task :classes
Task :jar FAILED
FAILURE: Build failed with an exception.
- What went wrong:
Execution failed for task ':jar'. Could not create ZIP 'C:\Users\Nikiforos\git\wekaDeeplearning4j\build\libs\wekaDeeplearning4j-1.5.14.jar'. - Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights. - Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':jar'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:110)
[后续堆栈跟踪内容保持原格式不变]
内容的提问来源于stack exchange,提问作者vicangel

