欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java: lib & classpath

程序员文章站 2022-06-05 18:20:48
...

classpath, is the path to search for third-part or user-defined classes,

refer to:
* linux
    docs.oracle.com/javase/6/docs/technotes/tools/solaris/classpath.html
    docs.oracle.com/javase/6/docs/technotes/guides/extensions/extensions.html
    docs.oracle.com/javase/7/docs/technotes/tools/solaris/jdkfiles.html
* windows
    docs.oracle.com/javase/6/docs/technotes/tools/windows/classpath.html
*

------
3 level of jars

include:
* java platform classes (bootstrap)
    location:
        jre_home/lib/
            rt.jar
            ..
    this will be searched automatically, load by bootstrap classloader,
* java extension
    location:
        jre_home/lib/ext/
    this will be searched automatically, load by extension classloader,
* third-party & user-defined
    this need to specify in classpath, load by system classloader,
*

search order:
    java platform classes -> java extension -> third-party & user-defined,

------
set classpath

2 ways to set:
* set CLASSPATH environment
* use -cp option
*

default value:
    classpath default to current dir,

override:
    both of them will override the default classpath,
    so add "." to include current dir, and add "$CLASSPATH" as prefix to include the original classpath,

search order:
    the search order of classpath, is the same as you specified in classpath,

------
classpath format

format:
    linux:
        path_1:path_2:..:path_N
    windows:
        path_1;path_2;..;path_N

path:
    each path could be jar/zip/dir, '.' means current path,
    the dir or root dir included by jar/zip, should include:
    * the top package folder, if class has package
    * .class file, if class has no package

wildcard:
    '*', used it at end of a path, after separator '/', it equals to include all files with extension '.jar' or '.JAR' in that folder,
    '*' can't be used in other format,
    e.g.
        # this will include all jars under "/tmp/lib"
        "/tmp/lib/*"

------
tools.jar & dt.jar

under jdk_home/lib, there are some jars, they are not part of java platform, but are useful tools,
if want to use them, need to include in classpath,

jars:
* tools.bar
    non-core classes for support of the tools and utilities in the JDK
* dt.jar
     the DesignTime archive of BeanInfo files that tell IDE how to display the Java components and how to let the developer customize them for an application,
*

------
e.g.

* config classpath - linux - eric.sh
    CLASSPATH=.:$JAVA_HOME/lib/*
* execute command by add additional path to configured classpath - linux
    java -cp $CLASSPATH:/mnt/star/workspace/java_workplace hello.Test
*
* set classpath via command temporary - linux shell
    # include a single jar, base on original classpath,
    export CLASSPATH=$CLASSPATH:/tmp/test.jar
    # include all jars under specified folder, base on original classpath,
    export CLASSPATH=$CLASSPATH:/tmp/lucene_demo/lib/*
*

------