升级至Play 1.7.1与JDK17后遇编译错误:类型已定义
解决Play 1.7.1 + JDK17下"The type ModelLogikDn is already defined"编译错误
- 清理编译残留文件:Play框架默认编译输出目录为
target/classes,升级后可能残留旧版本生成的ModelLogikDn.class文件,与新编译文件冲突。直接删除整个target目录,再执行play clean compile命令重新编译。 - 排查类路径中的重复类:JDK17的模块系统对类路径处理更严格,检查项目
lib目录下的依赖jar包,是否有jar中包含同名的ModelLogikDn类。可使用jar tf <jar文件名>命令查看jar内的类文件列表,同时确认项目中是否有其他非app目录(比如自定义类文件夹)存在该类的副本。 - 检查Play编译扫描范围:Play 1.7.1适配JDK17时可能调整了编译扫描规则,查看
application.conf中的play.classpath相关配置,确认是否有额外目录被误加入编译路径,导致同名类被重复扫描。 - 验证文件大小写问题:Windows系统下文件系统不区分大小写,但JDK17对类名的大小写校验更严格。检查项目中是否存在类似
ModelLogikDN.java和ModelLogikDn.java的大小写差异文件,旧版本JDK可能忽略该差异,JDK17会识别为不同文件但类名重复。 - 清理IDE缓存:如果使用IDEA、Eclipse等IDE开发,IDE缓存的旧编译信息可能导致冲突。执行IDE的缓存清理操作(如IDEA的
File -> Invalidate Caches...),之后重新导入项目并编译。
内容的提问来源于stack exchange,提问作者Tomilausa
相关产品推荐
相关产品推荐

