今天早上被一个问题折磨了半天:为什么把同样的包放在不同的地方,运行的结果不一样?后来才发现原来不小心把hibernate所在的类包设置成了系统类包。这使我对java对类库的加载顺序产生了兴趣,于是google了下,呵呵,收获不小。
java加载库的方法跟它的CLASSLOADER有关,不同的JVM有不同的CLASSLOADER。现介绍J2SDK自带的JVM的加载顺序。
首先,JAVA会跟据系统的参数CLASSPATH,把参数里所包含的JAR(ZIP,目录)加载。只要使用该JVM,不用设置CLASSPATH,程序里用到类就会自动到这里面找到并加载。
其次,在我们运行java.exe 运行某个程序时,也可以加上-classpath(-cp)加上所用到的包。不过这些包只在这次运行会有效,对别的程序运行并没影响。
最后,程序还会从当前目录(当前包)里加载类文件。(废话一句)
象TOMCAT就是用第二种再把附加的包加进去的。所以在TOMCAT中使第三方的包有两种方法可以把把这些包加进去。一种就是在系统的参数CLASSPATH中加上,另一种方法就是修改bat文件。