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

引入DNSJava 2.1.8依赖导致JPMS兼容性失效问题求助

问题原因分析

编译失败的核心原因是dnsjava 2.1.8版本并非JPMS兼容模块:该jar包中存在顶级目录下的lookup.class文件(属于无名包),而JPMS规范明确禁止模块包含无名包,导致Maven无法识别其为有效的模块,进而报错module not found: dnsjava。

解决思路

方法一:升级dnsjava至JPMS兼容版本(推荐)

dnsjava从3.x版本开始已适配JPMS,添加了合法的module-info.java并移除了无名包问题。修改pom.xml中的依赖版本为最新兼容版本(例如3.5.2):

<dependency>
    <groupId>dnsjava</groupId>
    <artifactId>dnsjava</artifactId>
    <version>3.5.2</version>
</dependency>

升级后,该jar会被识别为合法模块,模块名即为dnsjava,原有的module-info.java无需修改,Maven编译可正常通过。

方法二:将dnsjava作为自动模块兼容使用(仅限无法升级的场景)

若无法升级依赖,需配置Maven编译器插件,强制将该jar视为自动模块并允许无名包:

  1. 在pom.xml中添加maven-compiler-plugin的配置:
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.10.1</version>
            <configuration>
                <source>17</source>
                <target>17</target>
                <compilerArgs>
                    <arg>--add-modules</arg>
                    <arg>dnsjava</arg>
                    <arg>--allow-unnamed-packages</arg>
                </compilerArgs>
            </configuration>
        </plugin>
    </plugins>
</build>
  1. 保留原module-info.java中的requires dnsjava,自动模块名称由jar文件名推导而来(即dnsjava)。注意:--allow-unnamed-packages属于JPMS非标准参数,可能在后续Java版本中被移除,因此仅作为临时方案。

方法三:放弃JPMS模块规范(不推荐)

若项目无需严格遵循JPMS,可直接删除module-info.java文件,Maven会将项目作为传统类路径项目编译,依赖的dnsjava可正常加载。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 22:05:00