java、javac和jar的使用

来源:互联网 发布:一个java项目组多少人 编辑:程序博客网 时间:2024/04/28 15:05

文件目录结构

root    src        p1\Universe.java Sun.java        p2\Star.java    classes1        p1\Sun.class        p1\Universe.class    classes2         p2\Star.class

Universe.java和Sun.java同在p1包内,Star.java是在p2包内。

Universe定义如下,引用了同包的Sun类和异包的Star类。

package p1;import p2.Star; // 引用了p2包的Star类public class Universe {    public static void main(String[] args) {Sun sun = new Sun();        // Sun类在p1包Star star = new Star();     // Star类在p2包        System.out.println("Universe");    }}

编译java文件

为了编译Universe,首先要分别编译Sun和Star类,以下命令均在root下输入,注意编译的目的地目录classes#必须存在。

1. 编译Sun类,并把class文件放在classes1目录下:

javac src\p1\Sun.java -d classes1


2. 编译Star类,并把class文件放在classes2目录下:

javac src\p2\Star.java -d classes2


3. 最后编译Universe类,并把class文件放在classes1目录下:

javac -cp classes1;classes2 src\p1\Universe.java -d classes1
注意-cp给的是class文件所在包(p1, p2)的位置。Windows使用分号;分割,Linux使用冒号:分割。

如果class文件都放在同一个目录classes下,用一行命令完成上面三条命令:

javac src\p1\*.java src\p2\*.java -d classes


运行Universe:

java -cp classes1;classes2 p1.Universe
-cp路径中要包含Universe自己所在的位置和所使用的类所在的位置。-cp一定是用包的位置。main类要含包名(p1.Universe)。


打成jar包

jar cf universe.jar -C classes1 . -C classes2 .
c是create,f是file,jar文件名,包含的文件。这里用了-C dir . 是说把dir的内容放进jar包中,而不包含dir自己这个目录。


打包时如果要含manifest,则新建一个manifest.txt:

Main-Class: p1.Universe
注意要含包名。manifest最后一定要空一行。

jar cmf manifest.txt universe.jar -C classes1 . -C classes2 .
m是manifest。


不想新建manifest文件的话:

jar cfe universe.jar p1.Universe -C classes1 . -C classes2 .

在manifest中添加classpath,这样在运行时就不用指定-cp了:

Class-Path: Star.jar

在manifest中添加版本信息:

Name: java/util/Specification-Title: Java Utility ClassesSpecification-Version: 1.2Specification-Vendor: Example Tech, Inc.Implementation-Title: java.utilImplementation-Version: build57Implementation-Vendor: Example Tech, Inc.

包密封(sealing),保证在包中使用的类都是在jar包中的:

Name: com/package/Sealed: true

显示jar包内容:

jar tf universe.jar


解压jar包:

jar xf universe.jar

运行jar包:

java -jar universe.jar


如果manifest不含Main-Class:

java -cp universe.jar p1.Universe


如果universe.jar不包含Star.class:

java -cp universe.jar;classes2 p1.Universe



0 0