在很多java相关的工具中,比如ant,maven等等,由于在编译的时候需要根据编码文件中的import引用去查找对应的jar包。通常优先会在自己的lib库中jar包,如果没有的话,就会到约定俗成的路径去寻找。通常就是系统的环境变量中去寻找可能的路径。
比如经典的CLASSPATH路径。
如下是在ant.bat中的执行脚本,默认也是到CLASSPATH制定的路径中去寻找对应的包。
所以,环境变量能够起到作用,是和整个业界的“潜规则”相关的。
经典的JAVA_HOME就是最典型的例子。如果你非要用JAVA_BIGHOME。没问题,但你会发现,以后的每一个支撑你开发的软件,运行容器(tamcat)都需要修改默认的环境变量或者直接指明绝对路径。还有一种人喜欢直接把对应的jar包直copy到对应软件的lib中去。
有人说,我愿意这样。无可厚非。但是有一点,版本管理是个大问题。
如果不使用环境变量。假设你有很多不同版本库,比如jdk 1.7 and 1.8。如果你都通过copy和绝对路径的方法来解决编译和运行问题的话,很容易会导致不同的子系统引用的库因版本不同而在运行的时候产品各种奇怪的问题,有些很难定位。
所以,在真正的项目中,版本的归一化和统一引用是相当重要的。这也是maven如此流行的原因。
特别是刚学习编程的同学而言,养成良好的通过环境变量来连接不同程序的编译、运行习惯是很重要的。这会加快你的学习的效率(为了环境的问题搞个一天半载太常见了)
如果一个程序库需要被这个系统别的程序调用。建议直接新增一个环境变量,来保存它存放的路径。别的程序通过环境变量来访问你的库。这样的话,以后如果这个程序切换了版本,只需要修改一个环境变量的路径就OK了(这其实非常符合面向抽象 (接口)的编程思维,也符合设计模式中依赖倒置原则)。这样会显著提高未来对环境的维护效率。
这篇文章也给自己在工作中提个醒,要重视环境变量的处理。