Получить JAR время компиляции - PullRequest
7 голосов
/ 29 марта 2012

Я пытаюсь получить время компиляции исполняемого файла JAR, который я экспортирую из Eclipse.Один из способов сделать это, вероятно, - получить время модификации файла META-INF / MANIFEST.MF.К сожалению, я не могу найти способ получить эту информацию (я знаю, как читать сам манифест, используя getResourceAsStream("/META-INF/MANIFEST.MF"), но я не могу прочитать время его модификации).

Кто-нибудь знает, как это сделать?

Ответы [ 2 ]

7 голосов
/ 29 марта 2012

Если у вас есть доступ к самому файлу jar, вы сможете прочитать файл jar с помощью пакета java.util.jar, затем получить ZipEntry для файла манифеста и использовать getTime() для получения последнего времени обновления.

JarFile jf = new JarFile("myfile.jar");
ZipEntry manifest = jf.getEntry("META-INF/MANIFEST.MF");
long manifestTime = manifest.getTime();  //in standard millis

Если вам нужно разобраться с конкретным классом, то этот код может оказаться полезным;

String rn = this.getClass().getName().replace('.', '/') + ".class";
String path = getClass().getClassLoader().getResource(rn).getPath();
String jarFile = path.substring(0, path.indexOf("!"));

Тогда jarFile будет содержать путь к вашей банке.,Обратите внимание, что если класс не загружен из файла jar, третья строка не будет выполнена, так как path.indexOf вернет -1.

4 голосов
/ 30 марта 2012

В конце, основываясь на ответе Алекса Г. и других, найденных в других местах, я придумал более надежное решение (которое работает, например, для сетевых ресурсов):

public static Long getTime(Class<?> cl) {
    try {
        String rn = cl.getName().replace('.', '/') + ".class";
        JarURLConnection j = (JarURLConnection) cl.getClassLoader().getResource(rn).openConnection();
        return j.getJarFile().getEntry("META-INF/MANIFEST.MF").getTime();
    } catch (Exception e) {
        return null;
    }
}

Я надеялся на лучший путь перехода от объекта Class к имени ресурса, но, думаю, это нужно сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...