classpath的作用在于让虚拟机找到运行所需的class。
那么classpath是在哪定义的?
可能会遇到这样的问题。
我用不同方式执行下面一行打印classpath的代码,结果可能不同。
System.out.println(System.getProperty("java.class.path"));
不同方式是指在idea里直接run和打成jar包使用java -jar的方式run。
为什么?
那是因为不同的环境会指定自己的classpath。
比如说如果我们直接用java -jar的方式运行,那么classpath就是系统里设置的CLASSPATH环境变量或者我们通过-cp参数指定路径;
如果我们在idea或者eclipse运行,这些ide内部有设置classpath的机制,那么classpath就是ide来设置的。当然我猜测还是通过-cp的方式。很明显,idea里面会把maven的本地仓库目录路径加入到classpath。
再比如,web容器想tomcat这种,也会把项目的WEB/INF目录下的classes和lib目录加入到本项目的classpath。
所以,我们用不同的方式或者在不同的环境下拿到的classpath其实是不一样的。
https://stackoverflow.com/questions/1821571/classpath-java-buld-path-eclipse-and-web-inf-lib-what-to-use-when-and-wh