在Java 8上设置Maven单元测试的时区

如何在Java 8上的maven surefire中设置单元测试的时区?

在Java 7中,此功能以前systemPropertyVariables曾在以下配置中使用,但在Java 8中,测试仅使用系统时区。

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-surefire-plugin</artifactId>

<configuration>

<systemPropertyVariables>

<user.timezone>UTC</user.timezone>

</systemPropertyVariables>

为什么会这样,我该如何解决?

回答:

简短答案

现在user.timezone,在surefire在中设置属性之前,Java会更早阅读systemPropertyVariables。解决方案是使用argLine以下命令进行更早的设置:

<plugin>

...

<configuration>

<argLine>-Duser.timezone=UTC</argLine>

长答案

Java会user.timezone首次

需要时将默认时区考虑在内,然后将其缓存到中java.util.TimeZone。现在,在读取jar文件时已经发生了这种情况:ZipFile.getZipEntry现在调用ZipUtils.dosToJavaTime创建一个Date实例,该实例初始化默认时区。这不是特定于surefire的问题。有人称它为JDK7中的错误。该程序用于以UTC打印时间,但现在使用系统时区:

import java.util.*;

class TimeZoneTest {

public static void main(String[] args) {

System.setProperty("user.timezone", "UTC");

System.out.println(new Date());

}

}

通常,解决方案是在命令行上指定时区,例如java -Duser.timezone=UTC

TimeZoneTest,或使用编程设置TimeZone.setDefault(TimeZone.getTimeZone("UTC"));

完整示例:

  <build>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-surefire-plugin</artifactId>

... could specify version, other settings if desired ...

<configuration>

<argLine>-Duser.timezone=UTC</argLine>

</configuration>

</plugin>

</plugins>

</build>

以上是 在Java 8上设置Maven单元测试的时区 的全部内容, 来源链接: utcz.com/qa/399225.html

回到顶部