我一直在修改tycho_buildtimestamp_svn maven插件以满足我们的需求。一切进展顺利,getTimestamp()
例程正在返回预期的Date
。
然而,一旦回到tycho-packaging-plugin(BuildQualifierMojo.java),我们偶尔会遇到错误的日期。
我已经设法隔离它,现在已经超出了我的理解,减少了代码如下:
private TychoProjectVersion calculateQualifiedVersion() {
...
if (qualifier == null) {
Date timestamp = getBuildTimestamp();
System.out.println("Getting Qualifier: " + timestamp.toString());
qualifier = getQualifier(timestamp);
}
...
}
protected Date getBuildTimestamp() throws MojoExecutionException {
...
Date dt = provider.getTimestamp(session, project, execution);
System.out.println("Returning: " + dt.toString());
return dt;
}
结果:
Returning: Wed Feb 24 05:23:48 EST 2016
Getting Qualifier: Tue Feb 21 06:10:00 EST 2017
在300个左右的捆绑包构建中,这可能只影响其中的10-20个,但每次使用相同的捆绑包和相同的日期时,它是一致且可重复的。
编辑:有人提到尝试:Date result = new Date(dt.getTime());
return result;
这没有帮助。
EDIT2:
我将String.valueOf(System.identityHashCode(x))
包含在日志记录语句中。结果显示,对于那些工作正常的bundle,相同的Date对象用于第一个和第二个SysOut调用,但是对于那些失败的,它是一个不同的对象:
Returning: Wed May 25 02:15:35 EDT 2016 (821373005)
Getting Qualifier: Tue Feb 21 06:10:00 EST 2017 (1739646104)
我还能够确定在所有情况下,插件包类型都有效,并且只有功能包失败,但并非所有功能包都失败。