You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求可用的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个编译错误。


问题分析

这个错误主要有两个核心原因:

  1. Gradle缓存损坏:下载的Spark Jar包不完整或损坏,导致编译时无法正常读取文件
  2. 依赖版本不兼容: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. 验证步骤

  1. 将上述配置替换你的build.gradle文件
  2. 执行gradlew clean build run命令
  3. 如果仍然遇到下载问题,可以检查网络连接,或者手动下载对应版本的Jar包放入本地Gradle仓库

内容的提问来源于stack exchange,提问作者Ray Tayek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:30:21