【问题标题】:Maven Timestamp ErrorMaven 时间戳错误
【发布时间】:2016-04-11 12:35:38
【问题描述】:

当我使用 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 中为创建的文件添加时间戳?

【问题讨论】:

  • 这种手冲文件夹的目的是什么?

标签: maven maven-3 pom.xml


【解决方案1】:

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

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

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

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

来自官方Maven Introduction to POM

可以通过声明属性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 及其 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})。

【讨论】:

  • @Rajitsrajan 那是时区的问题。我将添加一个进一步的解决方案来更好地处理时区
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
  • 2013-12-22
相关资源
最近更新 更多