Java(21)classpath和jar包

classpath和jar包

classpath(很少设置,一般默认)

classpathJVM用到的一个环境变量,它用来指示JVM如何搜索class。所以,classpath就是一组目录的集合,它设置的搜索路径与操作系统相关

在windows系统中,可能长这样,分隔符为";"

C:\work\project1\bin;C:\shared;"D:\My Documents\project1\bin"  

在Linux系统中,可能长这样,分隔符为":"

/usr/shared:/usr/local/bin:/home/liaoxuefeng/bin

强烈不推荐在系统环境变量中设置classpath,那样会污染整个系统环境。在启动JVM时设置classpath才是推荐的做法。实际上就是给java命令传入-classpath-cp参数:

java -classpath .;C:\work\project1\bin;C:\shared abc.xyz.Hello

或者使用-cp的简写:

java -cp .;C:\work\project1\bin;C:\shared abc.xyz.Hello

.代表当前目录。如果JVM在某个路径下找到了对应的class文件,就不再往后继续搜索。如果所有路径下都没有找到,就报错。

没有设置系统环境变量,也没有传入-cp参数,那么JVM默认的classpath.,即当前目录:

java abc.xyz.Hello

不要把任何Java核心库添加到classpath中!JVM根本不依赖classpath加载核心库!

更好的做法是,不要设置classpath!默认的当前目录.对于绝大多数情况都够用了

jar包

如果一个项目有很多个.class文件,且存放在不同的目录下,管理起来很不方便,如果能够将众多目录打包成一个文件,就方便多了,如下图:

jar包实际上是一个zip格式的压缩文件,相当于windows系统里普通的文件打包。如果将jar包后缀名改为.zip,则可在windows里查看jar的内容。

jar包 包含一个特殊的/META-INF/MANIFEST.MF文件,MANIFEST.MF是纯文本,可以指定Main-Class和其它信息。JVM会自动读取这个MANIFEST.MF文件,如果存在Main-Class,我们就不必在命令行指定启动的类名,而是用更方便的命令,如下:

java -jar hello.jar //没有指定启动的类,因为存在Main-Class

在大型项目中,不可能手动编写MANIFEST.MF文件,再手动创建zip包。Java社区提供了大量的开源构建工具,例如Maven,可以非常方便地创建jar包。

posted @ 2020-08-29 09:27  Whatever_It_Takes  阅读(938)  评论(0编辑  收藏  举报