简短答案
现在
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=UTCTimeZoneTest,或使用编程设置
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>



