编译日期和时间

发布于 2024-08-15 23:20:10 字数 115 浏览 4 评论 0原文

Java 是否有与 C & 等效的 Java? C++ 编译时常量 __DATE__ 和 __TIME__。我需要打印正在编译的程序的编译时间和版本信息。

感谢

kodev19

Is there a Java equivalent to the C & C++ compile-time constants __DATE__ and __TIME__. I need to print compile time and version info of the program being compiled.

Thanks

kodev19

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

眼角的笑意。 2024-08-22 23:20:10

据我所知,没有这样的事情。
但是在运行的 JVM 上,您可以使用类似下面的代码直接从 jar 中获取一些信息(这里,信息来自编译时放入 jar 中的 Manifest 文件(无论您的构建系统是 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;
}

一旦使用,就会输出类似的内容(此处为 2008 年 3 月 15 日 20:43 编译的 commons-lang-2.4.jar 中提供的 StringUtils.class)。 ):

StringUtils $ commons-lang-2.4 $ 15/03/2008 20:43:16

As far as i know, there is nothing like that.
But on a running JVM you can get a few informations straight away from the jar using something like the code below (here, the information comes from the Manifest file put in the jar at compilation time (which ever your build system is, Ant or Maven or anything else). Feel free to adapte it (different output, and so on).

    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;
}

will output once used something like (here for the StringUtils.class available in the commons-lang-2.4.jar compiled on 15 march 2008 20:43) :

StringUtils $ commons-lang-2.4 $ 15/03/2008 20:43:16

雨后咖啡店 2024-08-22 23:20:10

Ant TStamp 任务在这里有用。它将在构建期间创建一个时间戳以插入属性文件或代码中。

设置 DSTAMP、TSTAMP 和 TODAY
当前项目中的属性。经过
默认情况下,DSTAMP 属性位于
格式为“yyyyMMdd”,TSTAMP 位于
格式为“hhmm”,今天在
格式“MMMM dd yyyy”。使用嵌套的
元素来指​​定
不同的格式。

这些属性可用于
构建文件,例如,创建
带时间戳的文件名,或用于
替换里面的占位符标签
文件来表明,例如,
发布日期。最好的地方
这个任务可能是在
初始化目标。

我倾向于使用它来构建一个包含构建时间和日期、用户和主机、版本号等的属性文件,然后我的应用程序读取该属性文件并记录相关信息(我通常不在这样的环境中)担心人们会摆弄这些信息)。

The Ant TStamp task is of use here. It'll create a timestamp during build time for insertion into properties files or code.

Sets the DSTAMP, TSTAMP, and TODAY
properties in the current project. By
default, the DSTAMP property is in the
format "yyyyMMdd", TSTAMP is in the
format "hhmm", and TODAY is in the
format "MMMM dd yyyy". Use the nested
element to specify a
different format.

These properties can be used in the
build-file, for instance, to create
time-stamped filenames, or used to
replace placeholder tags inside
documents to indicate, for example,
the release date. The best place for
this task is probably in an
initialization target.

I tend to use this to build a properties file containing build times and dates, the user and host, a version number etc. and then my application reads that properties file and logs the related info (I'm not normally in an environment where I'd worry about people fiddling with this info).

从﹋此江山别 2024-08-22 23:20:10

不能直接在代码中,不,但您可以使用 Ant 来执行此操作。

请参阅此页面上的“wombat”示例。

Not directly in the code, no, but you can use Ant to do this.

See the "wombat" examples on this page.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文