我的 NetBeans java 应用程序如何显示其构建时间?
How can my NetBeans java app display the time it was built?
我对 Java 应用程序编程比较陌生。我正在寻找一种方法,将应用程序的构建时间嵌入到应用程序的“关于”对话框中。它不需要花哨或采用任何特定格式,但确实需要针对每个构建进行更改。对于 C 项目,我会使用 DATE 和 TIME 预处理器宏。
我试过了
private void helpAboutMenuActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
// Trying to launch an About dialog
versionString = versionString.format( "Compiled on %s", compileTime );
System.out.println( "Version Info is: " + versionString );
System.out.println( "this.revision is: " + this.compileTime);
helpAboutDialog.showMessageDialog( helpAboutDialog,
versionString + "\r\n" + this.compileTime, // Message info
"Version Info",
helpAboutDialog.INFORMATION_MESSAGE );
}
其中定义了 compileTime
public class mainWindow extends javax.swing.JFrame {
/**
* Creates new form mainWindow
*/
public final Date compileTime = new Date();
然后我选择了 "Clean and Build" 和 运行 .jar 文件。显示的时间是我运行.jar文件的时间;当我关闭应用程序并 运行 几分钟后显示的时间不同。因为我只是 运行 .jar 文件,所以我认为时间应该是相同的。
我的构建环境是 Netbeans 7.4 和内置的 GUI 构建器(我不知道它的正确名称)。
有什么建议吗?如有必要,我可以尝试构建一个完整的应用程序来显示问题(我的实际源文件有 800 多行并且还在增长——其中大部分与此无关problem/issue)。
我接下来的想法是尝试在文件系统中找到.jar 文件并请求该文件的最后修改时间。只是为了获得一个版本号需要经历很多,但我知道我会在发布后收到支持请求,我真的很想知道确切的代码是什么 运行。根据我的经验,手动修改的版本号通常会在代码 fixes/updates 期间被遗忘。
更新:更改为使用 jar 文件 Xxx.class
条目时间戳,而不是 jar 文件自上次修改以来的 jar 文件自己的时间戳部署时可能会更新日期。
可以使用以下代码获取.class
文件的文件修改时间,如果运行直接从文件系统获取,如果打包则从jar文件入口获取。
Class<?> myClass = Test.class; // or getClass() if in non-static method
String classFileName = myClass.getSimpleName() + ".class";
URL classUrl = myClass.getResource(classFileName);
FileTime modifiedTime;
if (classUrl != null && "file".equals(classUrl.getProtocol())) {
modifiedTime = Files.getLastModifiedTime(Paths.get(classUrl.toURI()));
} else if (classUrl != null && "jar".equals(classUrl.getProtocol())) {
JarURLConnection connection = (JarURLConnection) classUrl.openConnection();
modifiedTime = connection.getJarEntry().getLastModifiedTime();
} else {
throw new IllegalStateException("Unable to determine build time for '" + classFileName + "'");
}
System.out.println("File '" + classFileName + "' was modified on " + modifiedTime);
当运行直接输出,例如来自 NetBeans
File 'Test.class' was modified on 2020-04-14T01:52:35.2654475Z
从jar文件运行时输出
File 'Test.class' was modified on 2020-04-14T01:52:34Z
我对 Java 应用程序编程比较陌生。我正在寻找一种方法,将应用程序的构建时间嵌入到应用程序的“关于”对话框中。它不需要花哨或采用任何特定格式,但确实需要针对每个构建进行更改。对于 C 项目,我会使用 DATE 和 TIME 预处理器宏。
我试过了
private void helpAboutMenuActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
// Trying to launch an About dialog
versionString = versionString.format( "Compiled on %s", compileTime );
System.out.println( "Version Info is: " + versionString );
System.out.println( "this.revision is: " + this.compileTime);
helpAboutDialog.showMessageDialog( helpAboutDialog,
versionString + "\r\n" + this.compileTime, // Message info
"Version Info",
helpAboutDialog.INFORMATION_MESSAGE );
}
其中定义了 compileTime
public class mainWindow extends javax.swing.JFrame {
/**
* Creates new form mainWindow
*/
public final Date compileTime = new Date();
然后我选择了 "Clean and Build" 和 运行 .jar 文件。显示的时间是我运行.jar文件的时间;当我关闭应用程序并 运行 几分钟后显示的时间不同。因为我只是 运行 .jar 文件,所以我认为时间应该是相同的。
我的构建环境是 Netbeans 7.4 和内置的 GUI 构建器(我不知道它的正确名称)。
有什么建议吗?如有必要,我可以尝试构建一个完整的应用程序来显示问题(我的实际源文件有 800 多行并且还在增长——其中大部分与此无关problem/issue)。
我接下来的想法是尝试在文件系统中找到.jar 文件并请求该文件的最后修改时间。只是为了获得一个版本号需要经历很多,但我知道我会在发布后收到支持请求,我真的很想知道确切的代码是什么 运行。根据我的经验,手动修改的版本号通常会在代码 fixes/updates 期间被遗忘。
更新:更改为使用 jar 文件 Xxx.class
条目时间戳,而不是 jar 文件自上次修改以来的 jar 文件自己的时间戳部署时可能会更新日期。
可以使用以下代码获取.class
文件的文件修改时间,如果运行直接从文件系统获取,如果打包则从jar文件入口获取。
Class<?> myClass = Test.class; // or getClass() if in non-static method
String classFileName = myClass.getSimpleName() + ".class";
URL classUrl = myClass.getResource(classFileName);
FileTime modifiedTime;
if (classUrl != null && "file".equals(classUrl.getProtocol())) {
modifiedTime = Files.getLastModifiedTime(Paths.get(classUrl.toURI()));
} else if (classUrl != null && "jar".equals(classUrl.getProtocol())) {
JarURLConnection connection = (JarURLConnection) classUrl.openConnection();
modifiedTime = connection.getJarEntry().getLastModifiedTime();
} else {
throw new IllegalStateException("Unable to determine build time for '" + classFileName + "'");
}
System.out.println("File '" + classFileName + "' was modified on " + modifiedTime);
当运行直接输出,例如来自 NetBeans
File 'Test.class' was modified on 2020-04-14T01:52:35.2654475Z
从jar文件运行时输出
File 'Test.class' was modified on 2020-04-14T01:52:34Z