2017-01-31 94 views
0

作爲構建過程的一部分,我對時間戳記和簽署我部署的.jar文件(通過JNLP部署)。我在做錯誤日誌記錄,並希望包含.jar文件中的時間戳,以此來確認錯誤來自哪個簽名構建。如何檢索.jar時間戳?

如何從運行.jar中訪問該時間戳?

回答

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()) - >

使用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

+1

你的文件,而不是jar文件內簽署時間戳的返回OS時間戳。 –

+0

不幸的是,jarsigner.exe是JDK的一部分,不能在只有JRE的客戶機上使用。 –

+1

@BrianKnoblauch似乎還有一個選項來獲取jar文件的證書:'keytool -printcert -jarfile myApp.jar''keytool.exe'在JRE – SomeDude