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

Java 9自动模块编译报错:Maven找不到spring.web等模块

解决Maven编译Java 9模块时找不到自动模块的问题

我来帮你拆解下这个问题——你遇到的情况其实是早期Maven版本对Java模块系统(JPMS)的支持不完善导致的:IntelliJ能正常识别是因为它自己做了模块路径的适配处理,但Maven 3.5.3默认还是把依赖放到类路径而非模块路径,自然找不到这些自动模块。结合你的配置,具体修复步骤如下:

1. 升级Maven版本到3.6.x及以上

Maven 3.5.3对JPMS的支持比较有限,3.6.0及更高版本才对模块路径的处理做了完善优化,能自动识别自动模块并将依赖加入模块路径。建议直接升级到3.8.x系列(稳定且兼容性好)。

2. 升级maven-compiler-plugin到3.8.0+

你当前用的3.7.0版本虽然宣称支持Java 9,但在自动模块的处理上有缺陷。升级到3.8.0+后,插件会自动处理模块路径,无需额外配置就能识别自动模块。修改pom.xml里的编译插件配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version> <!-- 推荐用这个版本或更高 -->
    <configuration>
        <release>10</release> <!-- 用release替代source/target,Java 9+的规范写法 -->
    </configuration>
</plugin>

用<release>标签可以确保编译时的源、目标版本和运行时环境一致,避免版本不匹配的问题。

3. 调整依赖的引入方式

看你的pom.xml,apache-sshd引入的是pom类型的依赖,这不会直接把sshd-core的jar包加入到模块路径里。你需要显式引入sshd-core的依赖,这样Maven才能把它识别为自动模块:

<dependency>
    <groupId>org.apache.sshd</groupId>
    <artifactId>sshd-core</artifactId>
    <version>1.7.0</version>
</dependency>

其他如果是pom类型的依赖,也需要调整为具体的jar依赖,确保Maven能正确抓取到对应模块的jar包。

4. 清理缓存并重新编译

做完以上修改后,执行以下命令清理Maven缓存并重新构建:

mvn clean install

这一步能确保Maven重新下载依赖并正确处理模块路径,避免旧缓存的干扰。

验证

完成上述步骤后,再次运行Maven编译,应该就能顺利识别所有自动模块,不会再出现module not found的错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:04:44