2011-08-18 28 views
2

是否可以使用JarSigner類在java中籤名jar文件?目前我使用:JarSigner在java中完成了嗎?

String args[] = {"-keystore", keystore, "-storepass", password, jar, keyname}; 
JarSigner js = new JarSigner(); 
js.run(args); 

,但如果出現任何故障,該js.run無效將調用System.exit(-1),導致我的整個應用程序崩潰。我正在考慮在線程內部運行,加入它直到完成,並檢查返回代碼。只是看看是否有更正式的方式來做到這一點...任何幫助將不勝感激。

+2

這是行不通的。 'System.exit()'會終止整個VM,而不僅僅是執行它的線程。 –

+0

有什麼辦法可以捕獲System.exit嗎? – wuntee

+0

原則上,您可以通過自定義類加載器來加載外部代碼,並讓它爲'java.lang.System'安裝一些自己的字節碼。但是,這並不是因爲內心的微弱 - 你需要自己處理所有其他_系統方法到虛擬機的實現。使用java.util.zip。*和java.security。*工具可以簡單地重新創建jar簽名過程,這可能更容易和可維護。 –

回答

0

我想你使用JDK工具中包含的Sun/Oracle JarSigner。你有兩個選擇:

0

如果您僅使用SHA1withRSA算法簽名,則有一個名爲zip-signer的項目。該項目的主要目標是Android,但該項目的核心庫「zipsigner-lib」不依賴於Android系統,因此它也可以在PC上運行。您可以查看名爲zipsigner-cmdline的PC的示例代碼。

如果您需要SHA1withRSA以外的算法,您可能需要修改GNU ClassPath項目的源代碼,這不是一件容易的事。