ビルドプロセスの一環として、配置済みの.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ファイルの証明書を取得するもう1つのオプションがあるようです: 'keytool -printcert -jarfile myApp.jar'' keytool.exe'はJRE – SomeDude