You need to enable JavaScript to run this app. 资源目录与Java类同名(无.class后缀)是否合规?为何Eclipse报错?
优惠活动
大模型
产品
解决方案
定价
更多

资源目录与Java类同名(无.class后缀)是否合规?为何Eclipse报错?

项目场景说明

我的项目采用如下目录结构:

src/
├── main
│   ├── java
│   │   └── com
│   │       └── soebes
│   │           └── packages
│   │               └── f1
│   │                   └── First.java
│   └── resources
│       └── com
│           └── soebes
│               └── packages
│                   └── f1
│                       └── First
│                           └── test.txt
└── test
    ├── java
    │   └── com
    │       └── soebes
    │           └── packages
    │               └── f1
    │                   └── FirstTest.java
    └── resources
        └── com
            └── soebes
                └── packages
                    └── f1
                        └── FirstTest
                            └── test.txt

可以看到,resources目录下存在路径为com/soebes/packages/f1/First的目录,该目录名与src/main/java对应路径下的First.java类同名(仅缺少.java后缀)。整个项目编译无任何问题。

构建产物结构

查看构建生成的target目录,结构显示正常:

target/
├── classes
│   └── com
│       └── soebes
│           └── packages
│               └── f1
│                   ├── First
│                   │   └── test.txt
│                   └── First.class
....
└── test-classes
    └── com
        └── soebes
            └── packages
                └── f1
                    ├── FirstTest
                    │   └── test.txt
                    └── FirstTest.class

补充说明:最终生成的JAR包结构也正常,可顺利构建未出现报错:

package (main)$ unzip -t target/packages-examples-1.0-SNAPSHOT.jar 
Archive:  target/packages-examples-1.0-SNAPSHOT.jar
    testing: META-INF/MANIFEST.MF     OK
    testing: META-INF/                OK
    testing: com/                     OK
    testing: com/soebes/              OK
    testing: com/soebes/packages/     OK
    testing: com/soebes/packages/f1/   OK
    testing: com/soebes/packages/f1/First/   OK
    testing: META-INF/maven/          OK
    testing: META-INF/maven/com.soebes.jvm.packages/   OK
    testing: META-INF/maven/com.soebes.jvm.packages/packages-examples/   OK
    testing: com/soebes/packages/f1/First/test.txt   OK
    testing: com/soebes/packages/f1/First.class   OK
    testing: META-INF/maven/com.soebes.jvm.packages/packages-examples/pom.xml   OK
    testing: META-INF/maven/com.soebes.jvm.packages/packages-examples/pom.properties   OK
    testing: META-INF/INDEX.LIST      OK
No errors detected in compressed data of target/packages-examples-1.0-SNAPSHOT.jar.

核心疑问

  • 这种类名与同路径资源目录同名的用法是否符合Java相关规范?
  • 直接在命令行使用javac编译可正常运行,在IntelliJ IDEA中使用也完全正常。
  • 但Eclipse处理该项目时出现问题,报错信息为The type FirstTest collides with a package,看起来是Eclipse解析target目录时出现的异常。查阅《Java语言规范(JLS)》未找到与该场景相关的规定,也可能是遗漏了相关内容。
  • 从技术逻辑上看,类对应的是FirstTest.class文件,而类文件与同名目录属于不同的文件系统对象,按理不应产生冲突。因此需要确认:
    • 如果这种用法合规,那么Eclipse的该报错是否属于产品bug?
    • 如果这种用法不合规,是否意味着javac、Maven、IntelliJ IDEA的处理都存在问题?
      该示例项目已上传至Github仓库供进一步排查。

运行环境信息

  • Apache Maven相关版本信息:
    Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
    Maven home: /Users/khmarbaise/tools/maven
    Java version: 11.0.8, vendor: AdoptOpenJDK, runtime: /Users/khmarbaise/.sdkman/candidates/java/11.0.8.hs-adpt
    Default locale: en_GB, platform encoding: UTF-8
    OS name: "mac os x", version: "10.14.6", arch: "x86_64", family: "mac"
    
  • Eclipse相关版本信息:
    Version: 2020-06 (4.16.0)
    Build id: 20200615-1200
    
  • IntelliJ IDEA相关版本信息:
    IntelliJ IDEA 2020.3.1 (Ultimate Edition)
    Build #IU-203.6682.168, built on December 29, 2020
    Runtime version: 11.0.9.1+11-b1145.63 x86_64
    VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
    macOS 10.14.6
    

2021年2月15日补充:已向Eclipse官方提交对应问题反馈。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.08 19:36:02