0
作爲構建過程的一部分,我對時間戳記和簽署我部署的.jar文件(通過JNLP部署)。我在做錯誤日誌記錄,並希望包含.jar文件中的時間戳,以此來確認錯誤來自哪個簽名構建。如何檢索.jar時間戳?
如何從運行.jar中訪問該時間戳?
作爲構建過程的一部分,我對時間戳記和簽署我部署的.jar文件(通過JNLP部署)。我在做錯誤日誌記錄,並希望包含.jar文件中的時間戳,以此來確認錯誤來自哪個簽名構建。如何檢索.jar時間戳?
如何從運行.jar中訪問該時間戳?
我汲取類似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())
- >
使用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
你的文件,而不是jar文件內簽署時間戳的返回OS時間戳。 –
不幸的是,jarsigner.exe是JDK的一部分,不能在只有JRE的客戶機上使用。 –
@BrianKnoblauch似乎還有一個選項來獲取jar文件的證書:'keytool -printcert -jarfile myApp.jar''keytool.exe'在JRE – SomeDude