jar包生成及使用

jar包就是别人已经写好的一些类,然后将这些类进行打包,你可以将这些jar包引入你的项目中,然后就可以直接使用这些jar包中的类和属性以及方法。

JAR(Java ARchive)是将一系列文件合并到单个压缩文件里,就象Zip那样。


要生成jar包,首先要编译成class文件。

而编译时要在正确目录下执行javac。否则会找不到程序包。我们的java文件一般首行是包的名字,其实就是文件夹结构。

例如 package src;那么我们编译时的目录就应该在src的上一级。

编译时我们对着主类使用javac,例如javac B.java那么B用到的类都将会被编译,没用到的不会被编译,哪怕是在同一级目录下。

如果你的类用到了其他jar包,那么应该使用:

javac -cp BB.jar LL.java

BB.jar是你使用的jar包。这样才能编译通过。生成了LL.class文件,但是没法单独执行LL.class。这种情况看下文。



生成jar包的指令:

jar -cvf BB.jar src/* B.class

这样会生成一个BB的jar包,里面的内容是src文件夹下所有文件,包括src文件夹,包括B.class。如果有其他文件,就接着写在指令后面。



执行jar包:

java -cp BB.jar B

执行BB.jar包,主类是B,也就是说B一定是有入口函数的。如果jar包里的MANIFEST.MF文件声明了主类,那么可以不用写B。

-cp 和 -classpath 是一个意思。如何用自己的声明文件,那么打jar包时,请看jar指令帮助说明。

如果你的类用到了其他jar包

举例:上面提到了LL.class文件生成了,然后我们打成LL.jar包,这个jar包class是依赖了BB.jar包,那么应该

java -cp BB.jar;LL.jar LL

LL是主类,就是入口。

附注:(转)

javac的编译单位其实就是单个的java文件,为了达到同时编译多个java文件的目的,可以将所需编译的java文件路径保存在一个txt中,比如sourcelist.txt,以换行为分隔符(这个过程称为类文件注册)。这些java文件没有彼此联系的必要,它们可以是隶属不同的包、在不同的文件夹下(当然建议包路径相同的java类文件放在同一文件路径下),javac命令只会一行一行地读取其中的记录,作为一个单位进行类编译。
举例说明。假设你的这个包放在src文件夹下,src的父目录为project,sourcelist.txt也事先新建在project文件夹下。首先将这个包中你需要编译的java文件相对于src的路径(如src\com\test\Test.java)注册到sourcelist.txt文件中;接着在project文件夹中新建一个bin文件夹(或者class文件夹,命名随你乐意取),用以编译后class文件的放置(这个配以javac命令中-d选项去理解);如果还有其他类库(如jxl.jar或者mysql.jar),建议在project目录下新建一个lib(同样命名不限)文件夹,然后复制到该文件夹下(配以-classpath选项理解);最后检查上述准备工作都完成,win + R、输入cmd都不用讲,现在在cmd中用cd命令切换到project目录,然后输入命令:
javac -classpath lib/jxl.jar -sourcepath src @sourcelist.txt -d bin
现在就很好理解了。-d选项就是destination的意思,即生成class文件被送到该选项后面的bin文件夹;-classpath就是将你要用到的jar包注册到类加载路径中;-sourcepath就是告诉javac命令去哪里找类文件。
最后呢,为了方便,可以在project文件夹下新建一个bat文件,并输入以下内容:
javac -classpath lib/jxl.jar -sourcepath src @sourcelist.txt -d bin
@pause
这样每次直接点击即可,而你需要编译其他包的或者其他java文件,直接在sourcelist.txt文件中添加或修改。这其实也是一种“弱耦合”、模块化的表现。


你可能感兴趣的:(java)