创建jar文件的过程

在这篇文章中,我们将介绍一下以编程方式创建jar文件的过程。在编写软件时,最终我们需要将其部署到生产状态。在某些情况下,使用带有独立文件的classpath是可以的。通常情况下,处理一个文件会更方便。在java的情况下,标准的方法是使用jar、war或ear文件。
基本过程是编写清单,打开jar,添加内容,最后保存jar。
jar文件的解剖jar文件是zip文件格式的扩展,包含了一个清单文件。清单文件是jar文件专用的特殊文件,可能包含各种设置。其中一些是主类、可选数据(即作者、版本等)和代码签名信息。
我们可以使用兼容zip的工具来查看和提取部分或全部存档。我们还可以包括一个jars或libs子目录,用于包含依赖性jar。由于jar是zip文件的扩展,我们可以包括任何文件或目录。
创建一个 jartool 类为了简化创建jar文件的过程,我们创建了一个单独的、普通的旧java对象(pojo)类,它封装了我们的操作。我们可以将条目放入清单文件,创建jar文件,添加文件或目录。
我们还可以创建方法来执行从jar中删除,甚至向现有的jar追加条目,尽管这些操作需要完全读取和重写jar。
jar描述符为了创建一个jar文件,我们必须首先开始制定清单。
public class jartool { private manifest manifest = new manifest(); public void startmanifest() { manifest.getmainattributes().put(attributes.name.manifest_version, 1.0); }}如果我们希望jar是可执行的,我们必须设置主类。
public void setmainclass(string mainfqcn) { if (mainfqcn != null && !mainfqcn.equals()) { manifest.getmainattributes().put(attributes.name.main_class, mainfqcn); }}另外,如果我们想指定额外的属性,我们可以把它们添加到清单中,比如说。
addtomanifest(can-redefine-classes, true);下面是这个方法。
public void addtomanifest(string key, string value) { manifest.getmainattributes().put(new attributes.name(key), value);}打开jar文件进行编写随着清单的完成,我们现在可以把条目写到jar文件中。要做到这一点,我们必须首先打开jar。
public jaroutputstream openjar(string jarfile) throws ioexception { return new jaroutputstream(new fileoutputstream(jarfile), manifest);}将文件添加到jar中在向jar中添加文件时,java使用solaris风格的文件名,使用正斜杠作为分隔符(/)。注意,我们可以添加任何类型的文件,包括其他jar文件或空目录。这对于包括依赖关系来说真的很方便。
另外,因为jar文件是classpath的一种形式,我们必须指定我们希望在jar中使用绝对路径的哪一部分。对于我们的目的,根路径将是我们项目的classpath。
了解了这一点,我们现在可以用这个方法完成我们的jartool类。
public void addfile(jaroutputstream target, string rootpath, string source) throws filenotfoundexception, ioexception { string remaining = ; if (rootpath.endswith(file.separator)) { remaining = source.substring(rootpath.length()); } else { remaining = source.substring(rootpath.length() + 1); } string name = remaining.replace(,/); jarentry entry = new jarentry(name); entry.settime(new file(source).lastmodified()); target.putnextentry(entry); bufferedinputstream in = new bufferedinputstream(new fileinputstream(source)); byte[] buffer = new byte[1024]; while (true) { int count = in.read(buffer); if (count == -1) { break; } target.write(buffer, 0, count); } target.closeentry(); in.close();}一个工作实例为了证明可执行jar的最低要求,我们将编写一个应用类,然后看看它是如何工作的。
public class driver { public static void main(string[] args) throws ioexception { jartool tool = new jartool(); tool.startmanifest(); tool.addtomanifest(main-class, com.javanorth.createjar.helloworld); jaroutputstream target = tool.openjar(helloworld.jar); tool.addfile(target, system.getproperty(user.dir) + srcmainjava, system.getproperty(user.dir) + srcmainjavacomjavanorthcreatejarhelloworld.class); target.close(); }}helloworld类是一个非常简单的类,只有一个main()方法可以打印出文本。
public class helloworld { public static void main(string[] args) { system.out.println(hello world!); }}为了证明它的作用,我们有这个例子。
$ javac -cp src/main/java src/main/java/com/javanorth/createjar/helloworld.java$ javac -cp src/main/java src/main/java/com/javanorth/createjar/jartool.java$ javac -cp src/main/java src/main/java/com/javanorth/createjar/driver.java$ java -cp src/main/java com/javanorth/createjar/driver$ java -jar helloworld.jarhello world!在这里,我们已经编译了每个类,然后执行了driver类,这将创建helloworld jar。最后,我们执行了这个jar,结果是打印出了 hello world 信息。
上面的命令应该从项目所在地执行。
总结在本教程中,我们看到了如何以编程方式创建一个jar文件,向其中添加文件,并最终执行。

小米7最新消息:攻关屏下指纹识别技术 或五月发布
2017年WWDC苹果开发者发布会,有哪些重点,值得你惊叫?
投资超213亿!这座城市强化“双招双引”推动传感器产业高质量发展
小米40w无线快充实测 4000mAh电池39分钟57秒充满
SWT手机重启问题分析指南
创建jar文件的过程
化肥元素测定仪的详细操作步骤介绍
OGS触控模块市场乐观 宸鸿光电忙布局
可调片电容的工作原理_可调贴片电容的作用
无线防盗报警电路制作及原理
Silicon Labs推出业界最快的隔离电流感测放大器
硬核DIY:油管把Up主180W的锐龙线程撕裂者塞到笔记本里
测定cod的方法有哪些?
在电源及电机控制中常用到过流保护功能
豪威科技计划每年新增12寸晶圆测试量42万片
制作一个Arduino Uno电源板
Wi-Fi和5G有望在6GHz频段共存?
什么是LC连接器?
首个5G边缘计算开源平台EdgeGallery在Gitee上正式开源
触底反弹?半导体销售额终于正增长