我知道Maven生命周期有test
阶段。惯例是将测试放在与被测试的原始类相同的包下。但是测试类究竟有权访问原始类,它们分别位于main
和test
的根文件夹中。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插件按照以下顺序构建测试类路径:
- 测试类目录
- classes目录
- 项目依赖项
- 其他类路径元素
这两个文件夹中的Java文件被编译到目标文件夹的单独子文件夹(target/classes和target/test-classes(中。然后,在运行测试时,这两个文件夹都被放在类路径中。
我曾经将一个maven构建重写为shell脚本。它可能会让你更清楚。https://github.com/Crydust/buildtools/blob/master/shell/build.sh