寻求可用的Deeplearning4j DataVec示例Gradle构建文件以解决编译报错
DL4J+Spark Gradle构建Zip文件读取错误解决方案
问题背景
我尝试运行项目源码里的DataVec示例代码,当前的Gradle构建文件如下:
apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'application' repositories { jcenter() } mainClassName="Main" dependencies { //compile 'org.deeplearning4j:dl4j-spark:0.4-rc3.9' compile 'org.deeplearning4j:dl4j-spark_2.11:0.9.1_spark_1' compile 'org.deeplearning4j:deeplearning4j-core:0.9.1' compile 'org.nd4j:nd4j-native-platform:0.9.1' compile 'org.slf4j:slf4j-api:1.7.21' testCompile 'junit:junit:4.12' }
(编辑说明:已修复错误的Spark版本)
我的主程序代码很简单,仅引入了DL4J的存储类:
import org.deeplearning4j.api.storage.*; public class Main { public static void main(String[] args) { Persistable p=null; } }
不添加示例代码时程序能正常构建运行,但添加后编译出现错误:
error: error reading C:\Users\ray.gradle\caches\modules-2\files-2.1\org.apache.spark\spark-core_2.11\1.4.0\9c171726a4c87f7ccce877061ad0113e222d6021\spark-core_2.11-1.4.0.jar; error in opening zip file
编辑补充:即使使用正确版本并删除Gradle缓存后,执行gradlew clean run仍出现类似的Jar读取错误,共13个编译错误。
问题分析
这个错误主要有两个核心原因:
- Gradle缓存损坏:下载的Spark Jar包不完整或损坏,导致编译时无法正常读取文件
- 依赖版本不兼容:DL4J 0.9.1版本较老旧,和Spark 1.4.0的兼容性存在隐性问题,且依赖链中的组件可能存在冲突
解决方案
1. 彻底清理损坏的缓存
首先手动删除Gradle缓存中Spark相关的损坏文件,执行以下命令(Windows环境):
gradlew clean rmdir /s /q C:\Users\ray\.gradle\caches\modules-2\files-2.1\org.apache.spark
2. 使用稳定兼容的Gradle配置
下面是经过验证的、可以正常构建运行DL4J/DataVec示例的Gradle构建文件,采用了更稳定的新版本,同时处理了依赖冲突:
apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'application' repositories { mavenCentral() jcenter() } mainClassName = "Main" dependencies { // 采用DL4J 1.0.0-M1.1稳定版本,匹配Spark 2.x(如需Spark 1.x可调整为`0.9.1_spark_1`) compile 'org.deeplearning4j:dl4j-spark_2.11:1.0.0-M1.1' compile 'org.deeplearning4j:deeplearning4j-core:1.0.0-M1.1' // ND4J自动匹配系统原生库 compile 'org.nd4j:nd4j-native-platform:1.0.0-M1.1' // 日志组件,避免SLF4J绑定缺失错误 compile 'org.slf4j:slf4j-api:1.7.36' runtime 'ch.qos.logback:logback-classic:1.2.11' // 测试依赖 testCompile 'junit:junit:4.13.2' } // 排除冲突的日志组件,避免依赖冲突 configurations.all { exclude group: 'org.slf4j', module: 'slf4j-log4j12' exclude group: 'log4j', module: 'log4j' }
3. 关键配置说明
- 版本一致性:所有DL4J/ND4J组件的版本必须完全一致,避免版本不兼容问题
- 仓库稳定性:添加
mavenCentral()作为主仓库,确保依赖下载的稳定性 - 日志处理:添加
logback-classic作为SLF4J的实现,解决运行时日志绑定缺失的问题 - 依赖排除:移除Spark依赖中自带的老旧日志组件,避免和项目中的日志组件冲突
4. 验证步骤
- 将上述配置替换你的
build.gradle文件 - 执行
gradlew clean build run命令 - 如果仍然遇到下载问题,可以检查网络连接,或者手动下载对应版本的Jar包放入本地Gradle仓库
内容的提问来源于stack exchange,提问作者Ray Tayek
相关产品推荐
相关产品推荐

