天天看点

Java千百问_02基本使用(003)_不使用IDE如何打jar包不使用IDE如何打jar包

jar包,最直白的感受就是后缀是.jar的一种压缩文件,它是以zip文件格式为基础的压缩包。

与zip文件不同的是,jar文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序。

jar包可以被类似jvm这样的工具直接使用,通过manifest、部署描述符等特殊文件,来指示工具处理特定的jar。

jar包大体分为2种,可执行jar包,不可执行jar包。

目前大多数的jar包都是不可被执行的,这类jar包就是提供给其他应用显现某些特定功能的。而可执行jar包可以在java环境上直接运行,大多数体现为小型工具。

1.首先,为了区别单文件,这次我们在不同的包下编写了两个类。类的具体功能非常明确,不再多说。

Java千百问_02基本使用(003)_不使用IDE如何打jar包不使用IDE如何打jar包

package com.helloword;  

import com.helloword.impl.hellowordimpl;  

public class helloword {  

public static void main(string[] args) {  

hellowordimpl hellowordimpl = new hellowordimpl();  

system.out.println(hellowordimpl.gettext());  

}  

Java千百问_02基本使用(003)_不使用IDE如何打jar包不使用IDE如何打jar包

package com.helloword.impl;  

public class hellowordimpl {  

    public string gettext() {  

        return "hello word jar";  

    }  

2.其次,把这两个类放在对应目录下,所谓"对应"及要求类的包与实际路径相符,只有这样,运行时才能找到正确路径下的类。

Java千百问_02基本使用(003)_不使用IDE如何打jar包不使用IDE如何打jar包

3.然后,使用javac工具进行批量编译,如果需要编译的量很大的话,需写一些工具脚本进行大量编译(todo,以后会有文章介绍)。

Java千百问_02基本使用(003)_不使用IDE如何打jar包不使用IDE如何打jar包

javac com/helloword/impl/hellowordimpl.java com/helloword/helloword.java  

Java千百问_02基本使用(003)_不使用IDE如何打jar包不使用IDE如何打jar包

编译后会在对应目录生成.class文件。

Java千百问_02基本使用(003)_不使用IDE如何打jar包不使用IDE如何打jar包

4.最后,对其进行打包。在打包之前,我们需要把我们的整个文件夹移动到一个新的文件夹下,这里将com放在了一个叫bin的文件夹下(如果不想把源代码打入其中,需要将.java文件移除)。

打包需要使用jar工具,这个工具会将所制定的文件夹里的内容打包成jar。cmd/终端进入bin所在的路径,输入:

Java千百问_02基本使用(003)_不使用IDE如何打jar包不使用IDE如何打jar包

jar cvf myhelloword.jar -c bin .  

其中"myhelloword.jar"是生成jar包的名称,"bin"是我们的文件夹目录。

p.s.

该方式打的jar包是没有办法运行的。其中,cvf是jar工具提供的几个参数,下面是jar命令的帮助说明:

用法:jar {ctxui}[vfm0me] [jar-file] [manifest-file] [entry-point] [-c dir] files ...

选项包括:

-c 创建新的归档文件

-t 列出归档目录

-x 解压缩已归档的指定(或所有)文件

-u 更新现有的归档文件

-v 在标准输出中生成详细输出

-f 指定归档文件名

-m 包含指定清单文件中的清单信息

-e 为捆绑到可执行 jar 文件的独立应用程序,指定应用程序入口点

-0 仅存储;不使用任何 zip 压缩

-m 不创建条目的清单文件

-i 为指定的 jar 文件生成索引信息

-c 更改为指定的目录并包含其中的文件,如果有任何目录文件,则对其进行递归处理。

清单文件名、归档文件名和入口点名的指定顺序与 "m"、"f" 和 "e" 标志的指定顺序相同。

示例 1:将两个类文件归档到一个名为 classes.jar 的归档文件中:

Java千百问_02基本使用(003)_不使用IDE如何打jar包不使用IDE如何打jar包

jar cvf classes.jar a.class b.class  

示例 2:使用现有的清单文件 "mymanifest" 并将 my/ 目录中的所有文件归档到 "classes.jar" 中:

Java千百问_02基本使用(003)_不使用IDE如何打jar包不使用IDE如何打jar包

jar cvfm classes.jar mymanifest -c my/ .  

5.我们需要的是一个能够运行的jar,所以我们需要编写并指定manifest.mf,告诉java工具jar包的执行入口(即我们的main方法)。

在com的同级目录(bin下面)下创建名称为"manifest.mf"的文件,并输入如下内容(还可以指定更多jar包的信息,这里我们只指定它的main类):

Java千百问_02基本使用(003)_不使用IDE如何打jar包不使用IDE如何打jar包

manifest-version: 1.0  

main-class: com.helloword.helloword  

保存之后,通过jar工具打包,这里要指定manifest.mf文件:

Java千百问_02基本使用(003)_不使用IDE如何打jar包不使用IDE如何打jar包

jar cvfm counter.jar manifest.mf -c bin .  

打包结果如下:

Java千百问_02基本使用(003)_不使用IDE如何打jar包不使用IDE如何打jar包

这样就能在bin下看到打好的myhelloword.jar包。

cmd/终端进入jar包所在的路径,输入:

Java千百问_02基本使用(003)_不使用IDE如何打jar包不使用IDE如何打jar包

java -jar myhelloword.jar  

运行结果:

Java千百问_02基本使用(003)_不使用IDE如何打jar包不使用IDE如何打jar包

原文地址:http://blog.csdn.net/ooppookid/article/details/50921672