如何在Maven测试阶段完成后复制生成的XML文件至指定目录?
解决Maven测试后复制XML到Allure结果目录的问题
我之前也碰到过类似的坑:测试阶段生成的文件总是在测试还没跑完就被复制,导致目标目录里的文件是旧的或者不存在。要解决这个问题,关键是把复制任务精准绑定到test阶段完全结束之后的生命周期节点上,用Maven官方的maven-resources-plugin就能搞定。
具体配置(直接贴到pom.xml里就行)
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.3.1</version> <!-- 建议用最新稳定版,可去Maven仓库查最新号 --> <executions> <execution> <id>copy-environment-to-allure</id> <!-- 绑定到test阶段的后置节点,确保测试生成的XML已存在 --> <phase>post-test</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <!-- 目标目录:target/allure-results --> <outputDirectory>${project.build.directory}/allure-results</outputDirectory> <resources> <resource> <!-- 源文件所在目录 --> <directory>src/test/resources</directory> <!-- 只复制需要的文件,避免冗余 --> <includes> <include>environment.xml</include> </includes> <!-- 如果你的XML里不需要替换Maven变量,就设为false --> <filtering>false</filtering> </resource> </resources> </configuration> </execution> </executions> </plugin> </plugins> </build>
为什么之前的尝试没效果?
- 你说用
verify阶段没起作用,大概率是因为Allure的结果收集可能在verify阶段之前就完成了,或者你的项目在verify阶段执行时,相关目录已经被其他插件处理过。而post-test是紧跟在test阶段之后的节点,测试一跑完就执行复制,时机刚好。 - 如果之前是直接用
resources插件的默认复制逻辑,它默认绑定到process-resources阶段(在test之前执行),所以会提前复制还没生成的文件。
验证方法
配置好后,执行mvn clean test,等测试跑完后去target/allure-results目录下看看,environment.xml应该已经在里面了。如果还是有问题,加个-X参数跑命令(mvn clean test -X),查看日志里这个插件的执行细节,排查路径或者阶段绑定的问题。
内容的提问来源于stack exchange,提问作者symon
相关产品推荐
相关产品推荐

