Maven项目中的测试类如何从主文件夹访问源类



我知道Maven生命周期有test阶段。惯例是将测试放在与被测试的原始类相同的包下。但是测试类究竟有权访问原始类,它们分别位于maintest的根文件夹中。Maven是否以某种方式合并了主类和测试类,以便在实际测试阶段,原始文件与测试文件位于同一目录中?例如,如果主文件夹结构为:

src/main/java/com/example/
|-- A.java

测试文件夹结构为:

src/test/java/com/example/
|-- ATest.java

Maven是否创建一个临时文件夹结构,如:

src/main/java/com/example/
|-- A.java
|-- ATest.java

这听起来可能是一个微不足道的问题,但我找不到关于Maven内部工作的任何细节。

Maven不复制源文件,而是在编译源文件后构建测试类路径。

查看Maven Surefire插件文档,特别是默认Classpath部分(配置Classpath页面(,其中指出:

Surefire插件按照以下顺序构建测试类路径:

  1. 测试类目录
  2. classes目录
  3. 项目依赖项
  4. 其他类路径元素

这两个文件夹中的Java文件被编译到目标文件夹的单独子文件夹(target/classes和target/test-classes(中。然后,在运行测试时,这两个文件夹都被放在类路径中。

我曾经将一个maven构建重写为shell脚本。它可能会让你更清楚。https://github.com/Crydust/buildtools/blob/master/shell/build.sh

最新更新