Maven子模块module_1无法识别依赖的shared模块类,如何解决?
修复Maven多模块依赖找不到类的问题
兄弟,你的问题其实出在两个关键配置错误上,咱们一步步来解决:
1. 核心问题分析
你的shared模块明明是包含Java代码的业务模块,但却配置成了<packaging>pom</packaging>,这会让Maven把它当成纯聚合/父模块,不会编译生成包含类文件的jar包;同时module_1依赖shared时不仅指定了错误的<type>pom</type>,连groupId都写错了,这俩问题叠加起来,自然找不到shared里的类。
2. 具体修复步骤
第一步:修改shared模块的pom.xml
把shared的打包方式改成jar(因为它要提供编译后的类给其他模块使用),同时可以去掉手动指定的version,直接继承父模块的版本:
<parent> <groupId>root</groupId> <artifactId>root</artifactId> <version>0.0.1</version> </parent> <artifactId>shared</artifactId> <!-- 移除手动写的version,自动继承父模块版本 --> <packaging>jar</packaging> <!-- 将pom改为jar --> <name>shared</name> <description>shared</description>
第二步:修正module_1里的shared依赖
首先,shared模块的groupId是继承父模块的root,不是shared;其次删掉<type>pom</type>(Maven默认依赖类型就是jar),同时用父模块版本变量避免硬编码:
<dependencies> <dependency> <groupId>root</groupId> <!-- 这里改为root,不是shared --> <artifactId>shared</artifactId> <version>${project.parent.version}</version> <!-- 继承父模块版本,无需硬写 --> <scope>compile</scope> <!-- 删除<type>pom</type>这一行 --> </dependency> </dependencies>
第三步:重新构建项目
回到Root目录下,执行清理+安装命令,确保shared模块先被编译并安装到本地仓库,这样module_1就能正常找到它的类了:
mvn clean install
额外优化建议
为了后续版本管理更省心,建议把Root父模块的version改成0.0.1-SNAPSHOT,这样所有子模块都会自动继承这个快照版本,不用手动维护每个模块的version,减少出错概率。
内容的提问来源于stack exchange,提问作者gstackoverflow
相关产品推荐
相关产品推荐

