我正在为部署的.jar文件(通过JNLP部署)加盖时间戳并签名,作为构建过程的一部分。我正在进行错误记录,并希望包含.jar文件中的时间戳,以确认错误来自哪个签名版本。
如何从正在运行的.jar中访问该时间戳?
答案 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