java编译日期和时间 1 周,3 日 Questions & Answers 8076 有没有与C&;C++编译时常数,γ-DATEYZ和γ-TimeType。我需要打印正在编译的程序的编译时间和版本信息 谢谢 科戴夫19
# 1 楼答案 据我所知,没有这样的事。 但是在运行的JVM上,您可以使用下面的代码直接从jar中获得一些信息(这里,信息来自编译时放入jar中的清单文件(无论您的构建系统是Ant还是Maven或其他什么)。可以随意调整(不同的输出,等等) public String getVersionfinal Class classe) { String version = null; String shortClassName = classe.getName().substring(classe.getName().lastIndexOf(".") + 1); try { ClassLoader cl = this.getClass().getClassLoader(); String threadContexteClass = classe.getName().replace('.', '/'); URL url = cl.getResource(threadContexteClass + ".class"); if ( url == null ) { version = shortClassName + " $ (no manifest)"; } else { String path = url.getPath(); String jarExt = ".jar"; int index = path.indexOf(jarExt); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); if (index != -1) { String jarPath = path.substring(0, index + jarExt.length()); File file = new File(jarPath); String jarVersion = file.getName(); JarFile jarFile = new JarFile(new File(new URI(jarPath))); JarEntry entry = jarFile.getJarEntry("META-INF/MANIFEST.MF"); version = shortClassName + " $ " + jarVersion.substring(0, jarVersion.length() - jarExt.length()) + " $ " + sdf.format(new Date(entry.getTime())); CloseHelper.close(jarFile); } else { File file = new File(path); version = shortClassName + " $ " + sdf.format(new Date(file.lastModified())); } } } catch (Exception e) { version = shortClassName + " $ " + e.toString(); } return version; } 输出将使用如下内容(此处为commons-lang-2.4.jar中提供的StringUtils.class,编译于2008年3月15日20:43): StringUtils $ commons-lang-2.4 $ 15/03/2008 20:43:16
# 1 楼答案
据我所知,没有这样的事。 但是在运行的JVM上,您可以使用下面的代码直接从jar中获得一些信息(这里,信息来自编译时放入jar中的清单文件(无论您的构建系统是Ant还是Maven或其他什么)。可以随意调整(不同的输出,等等)
输出将使用如下内容(此处为commons-lang-2.4.jar中提供的StringUtils.class,编译于2008年3月15日20:43):