Дата и время компиляции - PullRequest
       15

Дата и время компиляции

4 голосов
/ 16 декабря 2009

Существует ли Java-эквивалент констант времени компиляции C & C ++ __DATE__ и __TIME__. Мне нужно напечатать время компиляции и информацию о версии компилируемой программы.

Спасибо

kodev19

Ответы [ 3 ]

6 голосов
/ 17 декабря 2009

Насколько я знаю, ничего подобного нет. Но на работающей JVM вы можете получить немного информации прямо из jar-файла, используя что-то вроде приведенного ниже кода (здесь информация поступает из файла Manifest, помещенного в 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;
}

будет выводить когда-то что-то вроде этого (здесь для класса StringUtils.class, доступного в commons-lang-2.4.jar, скомпилированного 15 марта 2008 20:43):

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

3 голосов
/ 17 декабря 2009

Здесь можно использовать задачу Ant TStamp . Во время сборки будет создана временная метка для вставки в файлы свойств или код.

Устанавливает DSTAMP, TSTAMP и СЕГОДНЯ свойства в текущем проекте. От по умолчанию свойство DSTAMP находится в формат "ггггММДД", TSTAMP находится в формат "хммм", а СЕГОДНЯ в формат "ММММ дд гггг". Используйте вложенные элемент для указания другой формат.

Эти свойства могут быть использованы в файл сборки, например, для создания имена файлов с метками времени или используемые для заменить метки-заполнители внутри документы для указания, например, дата выхода. Лучшее место для эта задача, вероятно, в цель инициализации.

Я склонен использовать это для создания файла свойств, содержащего время и дату сборки, пользователя и хоста, номер версии и т. Д., А затем мое приложение считывает этот файл свойств и регистрирует соответствующую информацию (обычно я не среда, в которой я буду беспокоиться о людях, которые возятся с этой информацией).

2 голосов
/ 17 декабря 2009

Нет в коде, нет, но вы можете использовать Ant для этого.

См. Примеры "wombat" на этой странице .

...