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

Eclipse IvyDE托管库未被导出到可运行JAR文件问题

问题描述

此前Eclipse可正常将IvyDE托管的依赖库导出打包到可运行JAR文件中,但近期该功能突然失效,需定位故障原因并给出修复方案。

ivy.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation= "http://ant.apache.org/ivy/schemas/ivy.xsd">
  <info organisation="com.example" module="eclipse-ivyde-export-issue" />
  <dependencies>
    <dependency org="org.json" name="json" rev="20220320"/>
  </dependencies>
</ivy-module>
问题复现步骤
  • 克隆示例项目,执行命令:
git clone git@github.com:haba713/eclipse-ivyde-export-issue.git
  • 将克隆得到的项目导入Eclipse工作区。
  • 在项目目录树中右键点击src/com.example/Main.java类,选择Run as → Java Application,程序可正常运行,输出结果为:{"key":"value"}。
  • 右键点击项目,选择Export → Java → Runnable JAR file。
  • 选择com.example.Main类对应的启动配置,库处理选项勾选 Extract required libraries into generated JAR,点击Finish完成导出。
  • 尝试运行生成的JAR文件,抛出类找不到异常,错误信息如下:
$ java -jar eclipse-ivyde-export-issue.jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/json/JSONObject
  at com.example.Main.main(Main.java:8)
Caused by: java.lang.ClassNotFoundException: org.json.JSONObject
  at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
  at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
  at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
  ... 1 more
测试环境信息
  • Eclipse 2022-06 M2 (4.24.0 M2)
  • IvyDE 2.2.0.final-201311091524-RELEASE
  • OpenJDK 17.0.3+7-Debian-1deb11u1
  • Debian GNU/Linux 11 (Bullseye)
低版本环境验证情况

使用Eclipse 2020-06搭配OpenJDK 8测试同项目时,导出功能可正常运行:导出JAR时会弹出“This operation repacks referenced libraries”警告,IvyDE托管的类可正常被打包进生成的JAR文件。


故障根因

该问题属于版本兼容问题:当前使用的IvyDE 2.2.0是2013年发布的旧版本,未适配Eclipse 2021-09及之后版本调整的类路径容器解析逻辑。高版本Eclipse导出Runnable JAR时,无法识别IvyDE提供的自定义类路径容器中的依赖条目,因此不会将Ivy托管的依赖打包进最终JAR,运行时就会抛出类找不到的异常。低版本Eclipse的导出逻辑兼容旧版IvyDE的类路径实现,因此功能正常。

修复方案

可根据实际场景选择以下方案:

  1. 长期稳定方案:替换依赖管理工具,改用Maven或Gradle管理项目依赖。两者均有Eclipse官方维护的集成插件(m2e、Buildship),对高版本Eclipse和JDK的适配完善,不会出现导出JAR时依赖丢失的问题。
  2. 临时修复方案:手动将IvyDE托管的依赖转为本地可识别的类路径条目。在项目右键菜单选择Build Path → Configure Build Path,在Libraries标签页移除原有的IvyDE类路径容器,将Ivy下载到本地缓存的依赖Jar全部复制到项目自建的lib目录下,将该目录下的Jar添加到项目构建路径,同时在Order and Export标签页勾选所有依赖Jar,导出时Eclipse就能正常识别并打包这些依赖。
  3. 版本回退方案:如果必须使用IvyDE,可将Eclipse降级到2021-06及更早版本,搭配JDK 8使用,即可恢复原有导出逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 15:31:57