Java 的 Class Path 和 Package
作者:网络转载 发布时间:[ 2013/7/29 10:29:57 ] 推荐标签:
三、 jar 文件
以下把 .jar .zip 都看做是 .jar 文件.
1, 从前面我们可以看出来 jar 文件在 java 中非常重要, 极大地方便了用户的使用. 我们也可以做自己的 .jar 包.
还是使用前面那个例子, Main.java 是包之外的东西, 用了 pktest 包中的类,我们现在是要把 pktest 做成一个 .jar 包, 很简单, 刚才我们已经把 pktest中的 .class 都集中起来了,
[classes]$ jar -cvf mypackage.jar pktest
会生成 mypackage.jar 文件, 测试一下, 刚才我们生成的 Main.class 在classes 目录下, 所以, 从前面可以知道:
[classes]$ java -cp mypackage.jar:. Main
可以运行了.
2, 如果你看过 jdk 所带的例子, 你会知道, .jar 还可以直接运行,
[/demo]$ java -jar aJar.jar
那好, 那我们的试一试,
看来我们的 jar 和它的 jar 还不一样, 有什么不一样呢? 拿它一个例子出来,重新编译, 生成 .jar 文件, 比较后发现, 是 .jar 压缩包中 META-INF/MANIFEST.MF文件不一样, 多了一行, Main-Class: xxxxx, 再看看出错信息, 原来是没有指定Main-Class, 看看 jar 命令, 发现有一个参数 -m,-m include manifest information from specified manifest file
和出错信息有点关系, 看来它要读一个配制文件. 只好照猫画虎写一个了.
[classes]$ cat myManifest
Manifest-Version: 1.0
Main-Class: pktest.PackageTest
Created-By: 1.2.2 (Sun Microsystems Inc.)
[classes]$ jar -cvfm mypackage.jar myManifest pktest
added manifest
adding: pktest/(in = 0) (out= 0)(stored 0%)
adding: pktest/PackageSecond.class(in = 659) (out= 395)(deflated 40%)
adding: pktest/subpk/(in = 0) (out= 0)(stored 0%)
adding: pktest/subpk/PackageSub.class(in = 744) (out= 454)(deflated 38%)
adding: pktest/PackageTest.class(in = 1041) (out= 602)(deflated 42%)
[classes]$ java -jar mypackage.jar
Value of PackageTest is This is a Test Package
Value of PackageSecond is I am in PackageTest
Value of PackageSecond is I am in subpackage.
Value of PackageSub is I am in PackageTest
好了, 成功了, 这样做好了一个可以直接执行的 .jar 文件. 大家可以自己试一试
做一个以 Main 为主程序的可执行的 jar.
小结:
这篇文章中, 我们讨论了 java 中的 class path, package, jar 等基本但比较重要的东西, 主要是 class path. 并不是简单的一份 CLASSPATH 的完全功略, 而是试图让读者明白其原理, 自己思考, 自己动手. 其实大多数东西都在 sun 的 java doc中都有, 我只不过结合例子稍微谈了一下, 希望能有所帮助. 由于条件所限, 只测试了jdk1.2.2 在 98 及 linux 的情况, 其他版本的 jdk 和平台请大家自己测试, 错误在所难免, 还请指正.
下面是一些需要注意的问题:
1, 如果类路径中需要用到 .jar 文件, 必须把 jar 文件的文件名放入类路径, 而不是其所在的目录.
2, 在任何时候, 类名必须带有完全的包名,
3, "." 当前目录好在你的类路径中.下面是一些常见的编译和运行的模式.
4. To compile HelloWorld.java app in the default package in C:MyDir, use
CD MyDir
C:jdk1.3inJavac.exe -classpath . HelloWorld.java
5. To run a HelloWorld.class app, in the default package in C:MyDir, use
CD MyDir
C:jdk1.3inJava.exe -classpath . HelloWorld
6. To run a HelloWorld.class app, in the default package in a jar in C:MyDir, use CD MyDir
C:jdk1.3inJava.exe -classpath HelloWorld.jar HelloWorld
7. To compile a HelloWorld.java app in C:MyPackage, in package MyPackage, use
CD
C:jdk1.3inJavac.exe -classpath . MyPackageHelloWorld.java
8. To run a HelloWorld.class app in C:MyPackage, in package MyPackage, use
CD
C:jdk1.3inJava.exe -classpath . MyPackage.HelloWorld
9. To run a HelloWorld.class app in C:MyPackage, in a jar in package MyPackage,, use
CD MyDir
C:jdk1.3inJava.exe -classpath HelloWorld.jar MyPackage.HelloWorl
(注: default package 指的是在程序中不指定任何包). 后一个小小的建议, 把 sun 的 jdk tools documentation 好好地看一看,把 jdk 的那些工具 java javac javadoc jar javap jdb......好好用一用, 会有好处的. The Simplest Is The Best.
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11