Maven与Eclipse中JSONSchemaValidator模块名不一致,项目无法兼容构建
问题原因与解决方案
原因分析
你遇到的问题根源在于com.networknt/json-schema-validator 1.4.3版本是一个非模块化JAR:它既没有内置module-info.java定义模块,也没有在MANIFEST.MF文件中通过Automatic-Module-Name属性指定官方模块名。这种情况下,Maven(依赖JDK javac编译逻辑)和Eclipse的自动模块名推断规则出现了分歧:
- Maven遵循JDK的自动模块名规则,基于JAR的核心包路径推断出模块名为
com.networknt.schema; - Eclipse则基于JAR文件名(去掉版本号后将连字符替换为点)推断出模块名为
json.schema.validator;
两者的推断结果不一致,导致module-info.java中的声明只能适配其中一方。
解决方案
1. 升级到模块化版本(推荐)
从2.x版本开始,com.networknt/json-schema-validator已经添加了显式的module-info.java,官方统一模块名为com.networknt.schema,Maven和Eclipse都会一致识别这个名称。修改pom.xml中的依赖版本即可:
<dependency> <groupId>com.networknt</groupId> <artifactId>json-schema-validator</artifactId> <version>2.0.34</version> <!-- 可选择最新稳定版本 --> </dependency>
升级后,只需要在module-info.java中添加requires com.networknt.schema;,就能同时兼容Maven构建和Eclipse编码调试。
2. 手动统一模块名(不升级的场景)
如果无法升级版本,可以手动让Eclipse和Maven使用同一个模块名:
- 适配Eclipse到Maven的模块名:
右键项目 →Build Path→Configure Build Path→ 切换到Libraries标签页 → 找到json-schema-validator-1.4.3.jar→ 展开该依赖 → 点击Module→ 在弹窗中手动输入模块名com.networknt.schema→ 保存配置。这样Eclipse就会使用和Maven一致的模块名,module-info.java中保留requires com.networknt.schema;即可。 - 适配Maven到Eclipse的模块名:
在pom.xml中配置maven-compiler-plugin,添加编译参数指定模块名:
此时<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>11</source> <!-- 替换为你的项目JDK版本 --> <target>11</target> <compilerArgs> <arg>--add-modules=json.schema.validator</arg> <arg>--module-path=${project.build.dependencyClasspath}</arg> </compilerArgs> </configuration> </plugin> </plugins> </build>module-info.java中使用requires json.schema.validator;,就能同时兼容两边的构建需求。
内容的提问来源于stack exchange,提问作者fig
相关产品推荐
相关产品推荐

