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

不使用IDE如何打jar包

1.什么是jar包

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

与zip文件不同的是,jar文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序。
jar包可以被类似Jvm这样的工具直接使用,通过MANIFEST、部署描述符等特殊文件,来指示工具处理特定的jar。
jar包大体分为2种,可执行jar包,不可执行jar包。
目前大多数的jar包都是不可被执行的,这类jar包就是提供给其他应用显现某些特定功能的。而可执行jar包可以在java环境上直接运行,大多数体现为小型工具。

2.不使用IDE如何打jar包

本文是延续:如何用记事本编写Java程序,所以还是通过记事本来完成教程。
1.首先,为了区别单文件,这次我们在不同的包下编写了两个类。类的具体功能非常明确,不再多说。

[java] view plain copy

 

  1. package com.helloword;  
  2.   
  3. import com.helloword.impl.HelloWordImpl;  
  4.   
  5. public class HelloWord {  
  6.   
  7. public static void main(String[] args) {  
  8. HelloWordImpl helloWordImpl = new HelloWordImpl();  
  9. System.out.println(helloWordImpl.getText());  
  10. }  
  11. }  

[java] view plain copy

 

  1. package com.helloword.impl;  
  2.   
  3. public class HelloWordImpl {  
  4.   
  5.     public String getText() {  
  6.         return "Hello word jar";  
  7.     }  
  8. }  

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

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

[plain] view plain copy

 

  1. javac com/helloword/impl/HelloWordImpl.java com/helloword/HelloWord.java  

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

4.最后,对其进行打包。在打包之前,我们需要把我们的整个文件夹移动到一个新的文件夹下,这里将com放在了一个叫bin的文件夹下(如果不想把源代码打入其中,需要将.java文件移除)。
打包需要使用jar工具,这个工具会将所制定的文件夹里的内容打包成jar。cmd/终端进入bin所在的路径,输入:

[plain] view plain copy

 

  1. 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 的归档文件中:

[plain] view plain copy

 

  1. jar cvf classes.jar A.class B.class  

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

[plain] view plain copy

 

  1. jar cvfm classes.jar mymanifest -C my/ .  

5.我们需要的是一个能够运行的jar,所以我们需要编写并指定MANIFEST.MF,告诉java工具jar包的执行入口(即我们的main方法)。
在com的同级目录(bin下面)下创建名称为"MANIFEST.MF"的文件,并输入如下内容(还可以指定更多jar包的信息,这里我们只指定它的main类):

[plain] view plain copy

 

  1. Manifest-Version: 1.0  
  2. Main-Class: com.helloword.HelloWord  

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

[plain] view plain copy

 

  1. jar cvfm counter.jar MANIFEST.MF -C bin .  

打包结果如下:

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

3.如何运行jar包

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

[plain] view plain copy

 

  1. java -jar myHelloWord.jar  

运行结果:

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

时间: 2024-09-27 20:05:32

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

Java千百问_05面向对象(003)_java中抽象概念如何体现的

点击进入_更多_Java千百问 1.抽象是什么 抽象,和具体对立,定义了事物的性质,事物的性质会随着抽象概念的改变而改变. 2.java中的抽象类是什么 Java中最直接抽象概念的应用就是抽象类和接口,这里我们看一下抽象类. 抽象类和普通类一样,是一个模版.相比普通类,抽象类不具备实例化对象的能力.抽象类也可以定义属性和方法,比之普通类,它还可以定义没有实现的方法,即抽象方法.  通常会用一个具体类(子类)继承抽象类(父类),实现抽象类中的抽象方法.父类包含子类的集合的通用功能,但父类本身过于抽

Java千百问_02基本使用(004)_java开发应该使用什么工具

java开发应该使用什么工具 如果想编写大量的Java代码,使用记事本开发费时又费力,而且非常容易出错,也不能很方便的编译运行,效率非常低(使用记事本开发:如何用记事本编写Java程序).在这种情况下,一款快捷.宜用的开发工具就非常必要了.开发Java,根据开发方向的不同,我们会选择不同的工具,最为普遍的就是免费的Eclipse.NetBeans,收费的MyEclipse.JBuilder等,这些都属于集成开发环境(即IDE),我们首先看看什么是开发领域的IDE. 1.什么是IDE IDE,即I

Java千百问_06数据结构(003)_什么是基本类型包装器

1.什么是包装器 包装器也叫包装类,继承于Object,可以当作8种基本数据类型的类映射,包装器可以直接转换为基本数据类型(成为拆箱).如下:  了解8种基本数据类型看这里:java有哪8种基本数据类型 2.包装器有什么作用 包装器描述了基本数据类型的若干属性,包括基本类型的取值范围以及长度等.  例子: public class PrimitiveTypeTest { public static void main(String[] args) { // byte System.out.pri

Java千百问_03基本语法(002)_java都有哪些关键字

java都有哪些关键字 首先我们来看看什么是关键字,关键字的含义. 1.java关键字是什么意思 关键字是电脑语言里事先定义的,有特别意义的特殊标识符,又叫保留字. Java的关键字对Java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等等,Java规定关键字不能用作自定义标识符(包括变量名.方法名.类名.包名和参数等等). 2.java都有哪些关键字 目前共有50个Java关键字,如下.其中,"const"和"goto"这两个关键字在Java

Java千百问_04异常处理(007)_常见的java异常有哪些(非运行时)

1.常见的java运行时异常有哪些 了解非运行时异常看这里:什么是java中的异常  常见的运行时异常看这里:常见的运行时异常有哪些 我们所说的常见异常是jdk或者其他常用第三方jar中的异常,出现频次很高的异常.常见的非运行时异常(即检查异常,checked exception)包括: 操作数据库异常:SQLException 输入输出异常:IOException 文件未找到异常:FileNotFoundException 反射操作异常:ReflectiveOperationException

Java千百问_01基本概念(001)_什么是Java

什么是Java Java是一种开发语言(核心特点:跨平台,面向对象,名称由来看这里:J2EE里面的2是什么意思),对于开发者来讲,Java基本等于Jdk. Jdk的版本介绍看这里:Java都有那些版本 开发人员一般通过IDE(Eclipse.NetBeans.JBuilder等)编写.编译Java代码(在远古没有IDE的时代,都是用文本编辑器编写,使用javac编译),在这个过程中,会使用到Jdk与第三方Jar包(Jar包即一组编译后的类打成的压缩包,可以使用解压工具解压成文件结构). 想知道J

Java千百问_03基本语法(003)_public、privite、protected有什么区别

public.privite.protected有什么区别 首先,public.privite.protected都是Java的修饰符,我们先看看Java修饰符是什么 1.java修饰符是什么 Java修饰符是用来修饰Java中的标识符(包括变量名.方法名.类名.包名和参数名等等)的,用来改变它们的含义的关键词. Java语言有各种各样修饰符,大体分为两类:访问控制修饰符.非访问控制修饰符.如图: [java] view plain copy   public class className {

Java千百问_01基本概念(003)_J2EE里面的2是什么意思

J2EE里面的2是什么意思 J2SE,J2SE,J2ME中2的含义要追溯要1998年. 1998年Java 1.2版本发布,1999年发布Java 1.2的标准版,企业版,微型版三个版本,为了区分这三个版本,分别叫做Java2SE,Java2EE,Java2ME,简称J2SE,J2EE,J2ME.故,2的含义为1.2版本. 但是,这种叫法已经在2005年Java 1.6发布后取消,J2EE更名为Java EE,J2SE更名为Java SE,J2ME更名为Java ME. 所以,现在的J2EE等叫

Java千百问_05面向对象(008)_java中覆盖是什么

1.什么是覆盖 在Java中,覆盖是针对继承才有的概念,某一个子类需要某些方法或属性,但又不想使用父类中的同名的方法或属性,就需要使用覆盖.  直白的来说,就是在子类中编写与父类同名.同参数.同返回值的方法,或同名.同类型的属性,子类对象调用该方法/属性时,运行的是子类的方法,而不会执行父类的方法(除非在方法第一行写super();会先执行父类方法,再继续执行子类代码.) 了解类的构造函数看这里:类.对象到底有什么秘密  了解更多继承看这里:java类的继承有什么意义 2.构造函数如何覆盖 了解