Java Archive (JAR) files allows us to bundle multiple files in a single archive. Usually jar files contain class files and some other files like property files, images, applets etc.

Java存档 (JAR)文件使我们可以将多个文件捆绑在一个存档中。 通常,jar文件包含类文件和其他一些文件,例如属性文件,图像,小程序等。

We all have used jar files in projects, even JRE classes are packed as jar (rt.jar or classes.jar).

我们都在项目中使用过jar文件,即使JRE类也打包为jar(rt.jar或classes.jar)。

We can create jar file from any file, it’s similar to zip file.

我们可以从任何文件创建jar文件,它类似于zip文件 。

Here we will learn how to create a jar file from a java project. I have two packages and two classes in my java project (MyProject). The project structure looks like below image.

在这里,我们将学习如何从Java项目创建jar文件。 我的Java项目(MyProject)中有两个包和两个类。 项目结构如下图所示。

  1. Compile the java classes. This step is optional if classes are already compiled and inside target directory.

    pankaj@JD:~/CODE/MyProject/src$ javac com/journaldev/util/*.java com/journaldev/test/*.java -d ../bin/ -verbose
    [parsing started com/journaldev/util/MyUtil.java]
    [parsing completed 46ms]
    [parsing started com/journaldev/test/MyTest.java]
    [parsing completed 0ms]
    [search path for source files: .]
    [search path for class files: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jsfd.jar,/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar,/System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/Resources/Java/JavaRuntimeSupport.jar,/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/ui.jar,/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/laf.jar,/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/sunrsasign.jar,/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jsse.jar,/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jce.jar,/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/charsets.jar,/System/Library/Java/Extensions/AppleScriptEngine.jar,/System/Library/Java/Extensions/dns_sd.jar,/System/Library/Java/Extensions/j3daudio.jar,/System/Library/Java/Extensions/j3dcore.jar,/System/Library/Java/Extensions/j3dutils.jar,/System/Library/Java/Extensions/jai_codec.jar,/System/Library/Java/Extensions/jai_core.jar,/System/Library/Java/Extensions/mlibwrapper_jai.jar,/System/Library/Java/Extensions/MRJToolkit.jar,/System/Library/Java/Extensions/QTJava.zip,/System/Library/Java/Extensions/vecmath.jar,/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/apple_provider.jar,/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/dnsns.jar,/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/localedata.jar,/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/sunjce_provider.jar,/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/sunpkcs11.jar,.]
    [loading java/lang/Object.class(java/lang:Object.class)]
    [loading java/lang/String.class(java/lang:String.class)]
    [checking com.journaldev.util.MyUtil]
    [loading java/lang/System.class(java/lang:System.class)]
    [loading java/io/PrintStream.class(java/io:PrintStream.class)]
    [loading java/io/FilterOutputStream.class(java/io:FilterOutputStream.class)]
    [loading java/io/OutputStream.class(java/io:OutputStream.class)]
    [wrote ../bin/com/journaldev/util/MyUtil.class]
    [checking com.journaldev.test.MyTest]
    [wrote ../bin/com/journaldev/test/MyTest.class]
    [total 422ms]

    Note that I am compiling both the packages classes in bin directory. verbose option is added for debugging purpose only.

    请注意,我正在bin目录中编译这两个软件包类。 verbose选项仅用于调试目的。

  2. Using jar command to create the jar archive.
    pankaj@JD:~/CODE/MyProject/src$ cd ../bin
    pankaj@JD:~/CODE/MyProject/bin$ jar cvf MyProject.jar *
    added manifest
    adding: com/(in = 0) (out= 0)(stored 0%)
    adding: com/journaldev/(in = 0) (out= 0)(stored 0%)
    adding: com/journaldev/test/(in = 0) (out= 0)(stored 0%)
    adding: com/journaldev/test/MyTest.class(in = 444) (out= 303)(deflated 31%)
    adding: com/journaldev/util/(in = 0) (out= 0)(stored 0%)
    adding: com/journaldev/util/MyUtil.class(in = 444) (out= 304)(deflated 31%)

    Option c indicates that we want to create the jar file. Option v runs the jar command in verbose option that prints all the files included in jar archive and compression details. Option f allows us to send the output to the given file name.

    jar命令创建jar归档文件。

    选项c表示我们要创建 jar文件。 选项v在详细选项中运行jar命令,该命令将打印jar存档和压缩详细信息中包含的所有文件。 选项f允许我们将输出发送到给定的文件名。

Notice that jar command automatically adds the manifest file in the jar. Manifest file contains the metadata of jar file and it’s stored in META-INF/MANIFEST.MF file.

注意,jar命令自动将清单文件添加到jar中。 清单文件包含jar文件的元数据,并将其存储在META-INF / MANIFEST.MF文件中。

We can add our own manifest file with command jar cvmf MANIFEST.MF MyProject.jar com.

我们可以使用命令jar cvmf MANIFEST.MF MyProject.jar com添加自己的清单文件。

jar command matches the input parameters with the option name. Since we are using option as cvmf, we need to give the manifest file name first and then the jar file name.

jar命令将输入​​参数与选项名称匹配。 由于我们将option用作cvmf ,因此需要首先指定清单文件名,然后再指定jar文件名。

Your jar file is ready and you can use it in any other projects.

您的jar文件已准备就绪,您可以在其他任何项目中使用它。

翻译自: https://www.journaldev.com/1338/how-to-create-jar-from-java-classes

如何从Java类创建JAR相关推荐

  1. Eclipse中将java类打成jar包形式运行

    记录一次帮助小伙伴将java类打成jar包运行 1.创建java project项目 file > new > project > java project 随便起一个项目名称,fi ...

  2. PHP通过php_java_bridge调用第三方支付相关java类及jar包的一次尝试

    最近公司项目中引入第三方支付,闲暇之余尝试通过php_java_bridge来调用平台提供的jar包.期间其实踩了不少的坑,跨语言平台互相调用确实挺麻烦的,最终也仅在本地测试环境调试成功,事实上如果要 ...

  3. 使用idea将一个java类打成jar完整步骤

    有时候我们可能需要将一个java类打包成一个jar包,使用java -jar xxxx.jar直接运行,接下来我将一步一步使用idea打包一个jar演示. ** 1.点击File,选择Project ...

  4. c调用java jar_C#调用java类、jar包方法。

    一.将已经编译后的java中Class文件进行打包:打包命令JAR 如:将某目录下的所有class文件夹全部进行打包处理: 使用的命令:jar cvf test.jar -C com/ . 其中tes ...

  5. 几个不错的java类、jar包及其依赖查找网站。。。

    为什么80%的码农都做不了架构师?>>>    开发过程中有时需要查找类对应的jar包及其依赖,并且要能够下载... 之前都是用的以下两个(第一个还是不错,第二个比较垃圾,很多都查不 ...

  6. java类创建 request_java中怎么创建一个Request对象

    展开全部 package wzh.Http; import java.io.BufferedReader; import java.io.IOException; import java.io.Inp ...

  7. java类创建顺序,Java基础----你真的了解java类创建顺序吗?

    public class HelloParent { helloY y = new helloY(); static { System.out.println("parent static ...

  8. java类打成jar包(小游戏等)

  9. 使用JAXB将XML Schema绑定到Java类

    http://blog.csdn.net/zsyspace/article/details/1786079 Java Architecture for XML Binding (JAXB) 是一项可以 ...

最新文章

  1. 搜索引擎优化的基本要素
  2. 那个曾被阿尔法狗在围棋领域打哭的男人--柯洁,又夺斗地主全国冠军....
  3. python 多进程 字典,数组
  4. 2021暑假每日一题 【week8 完结】
  5. Codeforces 990E Post Lamps 【暴力】【贪心】
  6. 差分信号_形象解读差分信号,它比单端信号强在哪?
  7. bz2解压命令_tar 命令
  8. IE6和其他浏览器的css样式不同
  9. Struts2.x教程(一) Struts2介绍
  10. 几种ELK常见的架构模式
  11. 1.Shell 编程从入门到精通 --- 第一个 Shell 程序
  12. 【多目标优化求解】基于matlab粒子群算法求解智能微电网多目标优化问题【含Matlab源码 383期】
  13. Linux属于开放代码,下面()操作系统是开放源代码的。
  14. CI520只有SPI通讯接口,支持读写A卡,PIN对PIN直接替换CV520软硬件兼容
  15. php草莓派,甜品控的减脂早餐,这样做低卡又裹腹,草莓派香蕉派,好吃分享了...
  16. 一句话道破X64和X86的区别
  17. 快速查询多个圆通快递未签收单号的走件信息
  18. Android NFC 应用程序记录ARR
  19. 聊聊你不知道的Java变量转型
  20. 飞书:远程办公更轻松

热门文章

  1. 第二篇:浅谈自定义头文件可能导致的重定义问题
  2. 020-python函数和常用模块-文件操作
  3. http的response遇到illegalstateexception解决办法
  4. Android--Handler
  5. 计算纯文本情况下RichTextBox实际高度的正确方法(.NET)
  6. MySQL update慢问题解决
  7. 使用Microsoft Lookback网卡解决了断网情况下 Virtual Server 虚机和主机的网络连接
  8. [转载] python基础知识三——try与except处理异常语句
  9. [转载] Python 天气 简单 数据分析及可视化
  10. [转载] python数学计算模块之math常用函数学习使用