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

Maven项目中测试类如何访问main目录下的源类?

Maven测试类访问源类的原理(非目录合并)

核心结论

Maven不会合并src/main/java和src/test/java的源文件目录,测试类能访问同包源类,是依赖编译后字节码的类路径配置,而非源文件层面的合并。

具体工作流程

  • 第一步:编译主源码
    Maven先编译src/main/java下的所有源文件,将生成的.class文件输出到target/classes目录,比如你的例子中:
    target/classes/com/example/
    |-- A.class
    
  • 第二步:编译测试源码
    接着编译src/test/java下的测试类,生成的.class文件输出到target/test-classes目录:
    target/test-classes/com/example/
    |-- ATest.class
    
  • 第三步:执行测试
    运行测试时,Maven会将target/classes(主类字节码)和target/test-classes(测试类字节码)同时加入JVM的类路径(classpath)。

同包访问的本质

Java的包访问权限是基于字节码的包结构,而非源文件的物理目录。只要两个类的字节码在类路径中,且包名完全一致,测试类就能直接访问源类的包级成员,无需额外配置。

比如ATest.class的包是com.example,JVM在加载com.example.A时,会自动从类路径的target/classes中找到对应的字节码文件,完成类的加载和引用。

关于临时目录的澄清

Maven不会修改你的源文件目录结构,所有编译、临时文件都存放在target目录下,你的src/main/java和src/test/java始终保持独立,不会出现你假设的“合并目录”情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 16:45:47