如何检索.jar时间戳?

时间:2017-01-31 15:34:22

标签: java timestamp

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

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

1 个答案:

答案 0 :(得分:1)

我正在使用类似question的答案。

看来你可以通过以下方式获取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));

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

File f = new File( jarFile );

if ( f.exists() ) - &gt;

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

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

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

keytool -printcert -jarfile myApp.jar