如何从Java类创建JAR

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值