java、javac和jar的使用

文件目录结构

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 Classes
Specification-Version: 1.2
Specification-Vendor: Example Tech, Inc.
Implementation-Title: java.util
Implementation-Version: build57
Implementation-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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值