Java 程序的打包、签名和验证

参考资料

  该文中的内容来源于 Oracle 的官方文档。Oracle 在 Java 方面的文档是非常完善的。对 Java 8 感兴趣的朋友,可以直接找到这个总入口 Java SE 8 Documentation ,想阅读什么就点什么。本博客不定期从 Oracle 官网搬砖。这里介绍的工具是 jar 和 jarsigner 。

前言

*.javajavac*.classjava
abc.def.ghi.*.classabc/def/ghi/*.classjar*.jar

Java 程序中的 package 名和类文件的路径的对应关系

System.out.println("Hello, World!");SpeakerHelloWorldmainspeaker.sayHello();package com.xkland.sample;

srccom/xkland/samplejavac src/com/xkland/sample/*.java -d dst-d dstjavacdstjavacdst
dstjava com.xkland.sample.HelloWorlddst/com/xkland/sampleHelloWorld.classdstdstpackage类文件在文件系统中的路径

使用 jar 命令将程序打包

java -jar filename.jarjar-e
jar
jar-cfecfejardstjar -cfe HelloWorld.jar com.xkland.sample.HelloWorld comjar-Cjar -cfe HelloWorld.jar com.xkland.sample.HelloWorld -C dst comcom
jar -cfe HelloWorld.jar com.xkland.sample.HelloWorld -C dst ..dst
java -jar HelloWorld.jarjar -tf HelloWorld.jarHelloWorld.jarcom/xkland/sample/HelloWorld.classcom/xkland/sample/Speaker.classHelloWorld.jarMETA-INF/MANIFEST.MF
jardst-C dstjar -tf HelloWorld.jar

  关于 jar 的更多内容,可以直接查看 jar命令的手册,或者查看 Java教程中关于jar的章节 。

jar 包的签名和验证

HelloWorld.jarjarsignerkeytool -genkeypair -alias youxiayouxiaHelloWorld.jarjarsigner HelloWorld.jar youxiajarsigner -verify HelloWorld.jarHelloWorld.jar

  不动手不知道,一动手才发现 So Easy!更多的细节可以戳 Signing JAR Files 和 Verifying Signed JAR Files。

  jar 文件被签名后,里面多了一些文件,把它解包看一下,如下图:

MANIFEST.MFYOUXIA.SFMANIFEST.MFMANIFEST.MFYOUXIA.DSA
YOUXIA.DSA

总结

jarjarsignerjarjarsignerkeytool