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

JDK1.8下Ivy依赖报错:log4j-api已下载但log4j-api-java9找不到

问题分析与解决方案

首先咱们拆解下你遇到的问题:

你用JDK 1.8.0_181开发,引入Tika 1.21的tika-parsers依赖时,Ivy为什么会去查找不存在的log4j-api-java9:2.10.0?

原因很明确:Log4j 2.10.0针对JDK 9+的模块化系统(JPMS)发布了专属的log4j-api-java9模块,但这个模块只适用于JDK9及以上环境。Tika 1.21的依赖链中,Log4j的配置包含了基于JDK版本的条件依赖——当构建环境是JDK9+时才会拉取log4j-api-java9,但Ivy没有正确识别你的JDK 8环境,误触发了这个条件依赖的解析,导致去查找这个本不该出现在JDK8项目里的模块。

而且你已经成功找到log4j-api:2.10.0,这也印证了:log4j-api是通用版本,在JDK8环境下完全足够,log4j-api-java9属于多余依赖。


解决方法

这里有几个可行方案,按推荐程度排序:

1. 显式排除log4j-api-java9的传递依赖

这是最直接的方法,在你的Ivy依赖声明里直接排除这个不必要的模块,修改后的配置如下:

<dependency org="org.apache.tika" name="tika-parsers" rev="1.21">
  <exclude org="org.apache.logging.log4j" name="log4j-api-java9"/>
</dependency>

这样Ivy就不会再去查找这个模块,只会使用已经找到的log4j-api:2.10.0。

2. 配置Ivy识别JDK版本

如果不想手动排除,可以在Ivy的配置文件(比如ivysettings.xml)中添加JDK版本属性,让Ivy正确解析条件依赖:

<properties>
  <property name="java.version" value="1.8"/>
</properties>

这样Ivy会根据JDK 8的环境,自动跳过针对JDK9+的依赖。

3. 升级Tika版本(可选)

如果项目允许的话,升级到Tika 1.22及以上版本,这些版本的依赖配置已经优化了Log4j的依赖逻辑,不会在JDK8环境下触发log4j-api-java9的查找。不过这需要评估升级带来的兼容性风险。


关于是否可以安全排除log4j-api-java9

完全可以!log4j-api-java9是专门为JDK9模块化设计的补充模块,在JDK8环境下,log4j-api:2.10.0已经包含了所有必需的功能,排除这个模块不会影响Tika的正常运行,反而能彻底解决构建报错问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:04:48