使用surefire插件和postman插件,我可以生成一个万无一失的报告并向收件人发送电子邮件。但是,万无一失的报告(html)没有附上电子邮件。收件人收到没有附件的电子邮件。如果我再次运行该项目,则电子邮件已随附件一起提供。以下是我的pom.xml。我不知道我错过了什么。请帮忙。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.testing.example</groupId>
<artifactId>SampleExample</artifactId>
<packaging>jar</packaging>
<name>SampleExample</name>
<version>1.0.0</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>ch.fortysix</groupId>
<artifactId>maven-postman-plugin</artifactId>
<version>0.1.6</version>
<executions>
<execution>
<id>send_an_mail</id>
<phase>test</phase>
<goals>
<goal>send-mail</goal>
</goals>
<inherited>false</inherited>
<configuration>
<from>xxxxxxxxxx</from>
<subject>this is a test auto email sent from Eclipse using Maven</subject>
<htmlMessage>
<![CDATA[
<p>Hi, Please find attached.</p>
]]>
</htmlMessage>
<failonerror>true</failonerror>
<mailhost>smtp.gmail.com</mailhost>
<mailport>465</mailport>
<mailssl>true</mailssl>
<mailAltConfig>true</mailAltConfig>
<mailuser>xxxxxxx</mailuser>
<mailpassword>xxxxxxx</mailpassword>
<receivers>
<receiver>xxxxxxxxx</receiver>
</receivers>
<fileSets>
<fileSet>
<directory>${basedir}/target/site</directory>
<includes>
<include>**/surefire-report.html</include>
</includes>
</fileSet>
</fileSets>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
</plugins>
</reporting>
</project>
答案 0 :(得分:1)
通常,我发现在尝试引入Eclipse之前从命令行获取Maven构建更有帮助。
您是否设置了远程存储库(例如Nexus,Artifactory)?如果没有,如果你要继续定期使用Maven,最好将它安排好。远程仓库存在后,您需要configure the project's distributionManagement
元素才能将工件发布到该存储库。
现在,回到原来的问题。 surefire-report:report
是报告目标,默认情况下作为报告生命周期的一部分运行。在配置它之后,它与构建生命周期无关。在您的POM中,postman
插件绑定到test
阶段, 是默认生命周期的一部分。
当您按documentation Maven运行命令mvn surefire-report:report
时,运行构建生命周期直至并包括test
阶段。 (文档中的关键短语是“在执行之前调用生命周期阶段测试的执行。”)。
因此,运行mvn surefire-report:report
时的操作顺序为:
postman:send-mail
作为测试阶段的一部分运行surefire-report:report
创建报告注意最后两个步骤是如何乱序的。因此,第一次运行该命令时,还没有测试报告,因此没有附件。第二次运行它时,会有来自上一个版本的报告。
你的问题变成了,你是否计划偶尔在命令行运行它,以便在有人要求时发送报告?如果是这样,那么您可以简单地从邮递员插件中删除phase
配置并使用Maven命令mvn surefire-report:report postman:send-mail
。这将按正确的顺序执行这些步骤。
如果您希望电子邮件每次都发生(即每次mvn clean install site
),您需要将postman:send-mail
目标绑定到生成报告后运行的阶段。我会尝试site
阶段。如果这不起作用,请使用post-site
并将Maven命令更改为mvn clean install post-site
。
P.S。如果您是Maven的新手,我强烈建议您了解different lifecycles and the difference between a phase and a goal。如果没有这方面的知识,你就无法真正有效地使用Maven。
答案 1 :(得分:0)
只需更改插件的顺序即可。