Maven 时间戳错误

Maven Timestamp Error

当我使用 Maven 的时间戳 属性 时,我无法创建文件夹。 我已经分享了 pom 详细信息和生成的错误消息,但是我可以手动创建文件夹。

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <timestamp>${maven.build.timestamp}</timestamp>
        <outputFolder>C:/AutomationTestReports/${project.name}/Execution_(${timestamp})</outputFolder>
</properties>

当我使用上面的代码时,在maven的pom文件中。

作为构建的一部分,虽然报告了以下错误:

[TestNG] Reporter org.uncommons.reportng.JUnitXMLReporter@3d8c7aca failed
org.uncommons.reportng.ReportNGException: Failed generating JUnit XML report.
    at org.uncommons.reportng.JUnitXMLReporter.generateReport(JUnitXMLReporter.java:83)
    at org.testng.TestNG.generateReports(TestNG.java:1115)
    at org.testng.TestNG.run(TestNG.java:1074)
    at org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:293)
    at org.apache.maven.surefire.testng.TestNGXmlTestSuite.execute(TestNGXmlTestSuite.java:84)
    at org.apache.maven.surefire.testng.TestNGProvider.invoke(TestNGProvider.java:91)
    at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
Caused by: java.io.FileNotFoundException: C:\AutomationTestReports\Demo\Execution_(2016-04-11T12:13:35Z)\xml\Script.Demo.AppTest_results.xml (The filename, directory name, or volume label syntax is incorrect)
    at java.io.FileOutputStream.open0(Native Method)
    at java.io.FileOutputStream.open(FileOutputStream.java:270)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:162)
    at java.io.FileWriter.<init>(FileWriter.java:90)
    at org.uncommons.reportng.AbstractReporter.generateFile(AbstractReporter.java:10

但是,如果我删除时间戳,文件夹创建工作正常。

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <timestamp>${maven.build.timestamp}</timestamp>
    <outputFolder>C:/AutomationTestReports/${project.name}</outputFolder>
</properties>

问题: 如何在 Maven 中为创建的文件添加时间戳?

在你的情况下,主要错误如下:

Caused by: ... C:\AutomationTestReports\Demo\Execution_(2016-04-11T12:13:35Z)\...

在 Windows 中,您不能拥有包含 : 字符的文件夹。我怀疑您是否可以手动创建这样的文件夹。

要有一个有效的文件夹名称,它仍然可以满足您的要求,您还应该自定义另一个 Maven 属性:maven.build.timestamp.format.

来自官方Maven Introduction to POM:

The format of the build timestamp can be customized by declaring the property maven.build.timestamp.format

其默认值设置为 yyyy-MM-dd'T'HH:mm:ss'Z',这不是有效的 Windows 文件夹名称模式。

因此,您可以拥有以下内容:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.build.timestamp.format>yyyy-MM-dd'T'HH-mm-ss'Z'</maven.build.timestamp.format>
    <timestamp>${maven.build.timestamp}</timestamp>
    <outputFolder>C:/AutomationTestReports/${project.name}/Execution_(${timestamp})</outputFolder>
</properties>

注意:以上配置以-替换:字符为例,将生成有效的Windows文件夹名称。


为了更好地处理 Maven 中的时区,您可以使用 build-helper-maven-plugin and its timestamp-property 目标。

添加到 pom 的简单配置是:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.10</version>
    <executions>
        <execution>
            <id>timestamp-property</id>
            <goals>
                <goal>timestamp-property</goal>
            </goals>
            <configuration>
                <name>build.time</name>
                <pattern>yyyy-MM-dd'T'HH-mm-ss</pattern>
                <timeZone>Etc/GMT-2</timeZone>
            </configuration>
        </execution>
    </executions>
</plugin>

注意 timeZone 元素:在这里您应该指定您的时区,检查 here 以获得可用有效值的完整列表。

然后,在您的 pom 中,您可以使用上面指定的 build.time 属性,就像 Maven 属性 (${build.time}).