如何检索.jar时间戳



作为构建过程的一部分,我正在对已部署的.jar文件(通过 JNLP 部署)进行时间戳和签名。 我正在进行错误日志记录,并希望包含.jar文件中的时间戳,以准确确认错误来自哪个签名版本。

如何从正在运行的.jar内部访问该时间戳?

我正在从类似的问题中得出答案。

似乎您可以通过以下方式获取jar文件的位置:

public class ClassFileHelper {
    public static URL getClassURL(Class<?> clazz) {
        return clazz.getResource('/' + clazz.getName().replace('.', '/') + ".class");
    }
    public static String getJARFromURL(URL url) {
        if (!url.getProtocol().equals("jar"))
            return null;
        String fileName = url.getFile();
        fileName = fileName.substring(0, fileName.lastIndexOf('!'));
        fileName = fileName.substring(fileName.lastIndexOf('/') + 1);
        return fileName;
    }
}
Class clazz = MyClass.class;
URL classURL = ClassFileHelper.getClassURL(clazz);
String jarFile = ClassFileHelper.getJARFromURL(classURL));

然后为了获得签名的时间戳,我再次从这里的一个问题中复制一些其他答案 - 请原谅我逍遥法外!

File f = new File( jarFile );

if ( f.exists() ) ->

使用 Runtime.exec(...) jarsigner -verify -verbose -certs myjar.jar执行命令 - 确保将jarsigner的正确位置传递给参数。

解析[entry was signed on 8/2/13 3:48 PM]形式的输出以获取时间戳。

另一种选择是在 JRE 中使用 keytool

keytool -printcert -jarfile myApp.jar

最新更新