我学了一年Java,不知道java_home是干什么的,大家帮帮忙!

wangbaosun 2009-12-03 03:53:57
首先声明一下分不多了,就这些,都拿去吧,昨天问了同样的问题,可是没有满意的答案,郁闷中。。。学了一年的java现在还不知道java_home是干什么的,更是惭愧,希望明白的人能给我讲讲,别嫌我烦啊
我在网上看了好多帖子,有好多说是java_home是为了方便的,就像一个参数一样,如果改java的路径只需要改一下java_home就行了,而不需要改path和classpath,不设置java_home也可以滴。甚至还说java_home必须大写。可我用的是tomcat6.0如果不设置java_home,tomcat启不来,而且我试过不大写java_home也没事啊,郁闷,好多垃圾帖子误人子弟啊!
报错如下:
C:\tomcat6\bin>startup
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program
C:\tomcat6\bin>
我现在不明白问什么要设置java_home,为什么要设置tomcat_home?
网上一些帖子说,tomcat6.0的tomcat_home是设置在startup.bat里面,设置tomcat_home一个原因是因为tomcat里面有一个文件夹lib,当tomcat启动的时候tomcat就会加载lib里面的一些常用的包,我做了一个实验,确实是这样,我们经常用的servlet.jar就是在这个包里面。虽然你的工程没有这个包但是还能运行,原因可能是这样。所以这个tomcat_home就是告诉这个tomcat应用程序,当你运行的时候根据tomcat_home这个路径来找这个lib包就行了,不知道这么理解对不?
但是我认为,因为我们配置了path这个环境变量,当tomcat应用程序启动以后tomcat里面的程序可以利用java的反射机制来找到它自身的路径啊,干嘛还要配置tomcat_home啊?我这么想是因为我们平时写的批处理命令当运行时就从来不用加载其他的jar包或者类,所以我们就不用配置自己的环境变量。不知道我这么理解对吗?
还有为什么要配置java_home啊?我这个始终不理解。我没有配置java_home,我配置了path,我在任何一个盘符下编译和运行我的应用程序都没问题。那么tomcat也是java写的,他为什么需要配置java_home啊?
写的有点多,但真的不希望老菜鸟就这么菜下去,也真心的希望能够得到满意的答复。先谢了!
...全文
2253 55 打赏 收藏 转发到动态 举报
写回复
用AI写文章
55 条回复
切换为时间正序
请发表友善的回复…
发表回复
true 2012-07-06
  • 打赏
  • 举报
回复 1
javahome是环境变量而已,为什么要用javahome?其实不用也行!环境变量是培在classpath里的,培的方法就是把jdk的路径复制到classpath里加分号就行了,但有时候可能会变路径,所以我们把jdk路径放在另外建的javahome里,把javahome放在classpath里,改路径就可以直接在javahome里改方便了
true 2012-07-06
  • 打赏
  • 举报
回复
javahome是环境变量而已,为什么要用javahome?其实不用也行!环境变量是培在classpath里的,培的方法就是把jdk的路径复制到classpath里加分号就行了,但有时候可能会变路径,所以我们把jdk路径放在另外建的javahome里,把javahome放在classpath里,改路径就可以直接在javahome里改方便了
slm880408 2011-04-08
  • 打赏
  • 举报
回复 1
我日 这么简单的一个问题 你们一个个回答这么复杂 原因很简单 单独启动tomcat的时候 必须要配置JAVA_HOME 因为tomcat就是用JAVA写的 所以他启动的时候要用到JAVA的一些东西 所以要在JAVA_HOME里面配上JDK路径 如果是在eclipse或是MyEclipse这样的开发工具里面 就不用配java_home 因为在MyEclipse里面你配TOMCAT的时候指定了JDK的路径 所以不用 明白?
victorye81 2010-07-20
  • 打赏
  • 举报
回复
不错,今天终于弄明白了。。。。
iamaflexprogrammer 2010-03-31
  • 打赏
  • 举报
回复
这个问题我想大部分做开发的都不是很清楚,只不过没有去追问罢了。
我也一样是其中一个。
希望能得到更加好的答案。
jj229937432 2010-01-04
  • 打赏
  • 举报
回复
ding
lanwenyao 2009-12-06
  • 打赏
  • 举报
回复
变量名,,java环境配置参数

http://e188e.cn为您提供
a564707483 2009-12-06
  • 打赏
  • 举报
回复

太深澳了。` 没有去仔细的研究过了。` 长见识了。
zy122167 2009-12-06
  • 打赏
  • 举报
回复
为什么要配置java_home,其实你知道你的Javajdk的安装路径,但是计算机并不知道,所以你必须要配置环境变量来告诉计算机你的javajdk的路径,当然你在path中直接配置也行,但是当你的javajdk路径改变了,你是不是要把path中的路径也改变,还有classpath中的路径也要改下,或者其他的一些用到javajdk的你都必须改,但是你配置了java_home的话,你只需要改变一下java_home中的路径就行了,省事,
在有就是tomcat中java_home,如果你要startup启动tomcat,那么必须配置java_home,因为tomcat启动必须依靠javajdk,他回去寻找java_home中配置的javajdk路径,但是要问为什么tomcat中必须用到java_home,那么可以这样认为,他是一种默认的,通用的,就行了,

纯属自己认为,仅供参考
羽蓝 2009-12-06
  • 打赏
  • 举报
回复
关注中……
phyerbarte 2009-12-05
  • 打赏
  • 举报
回复
再说下你提到的
CATALINA_HOME问题
CATALINA_HOME一般都是用来设置tomcat安装路径的
如果你在系统变量里配制了CATALINA_HOME
那么你就可以这么做,在cmd里打
C:\catalina.bat run
启动tomcat
是不是和JDK的JAVA_HOME打
C:\java -version
一个概念?
就是一个用处
那么怎么体现环境变量
你可以这么看
set CATALINAHOME = C:\tomcat\

C:\tomcat\bin
就完全等于(是完全等于,不是相当于)
%CATALINAHOME%\bin
为了2个字,方便
用代码来理解就是
1
String JDKPath = "C:/programfile/jdk/jdk1.5/jdk1.5.10/";
String runPath = JDKPath +"bin";

2
String JDKPath = "C:/programfile/jdk/jdk1.5/jdk1.5.10/";
String runPath = "C:/programfile/jdk/jdk1.5/jdk1.5.10/bin";

到底1和2的写法哪个好,为什么你应该很明白吧。

那就直接用JDKPath拼了咯,不用再把那段超长的路径记下来,重复打一次。而且方便维护,你要换个路径,只要改下JDKPath的赋值,后面什么操作都会跟着动了。标准的门面模式,呵呵。还有不明白的不?好好看看我回的3个帖子仔细理解理解。这3天感觉真的麻了好多字。。。
phyerbarte 2009-12-05
  • 打赏
  • 举报
回复
[Quote=引用 41 楼 flatcat 的回复:]
就像樓上有些兄弟所說的,那是因為你所執行的批處理檔直接或間接使用了Java_Home這個環境變量,你可以
仔細閱讀批處理檔的內容。
[/Quote]

仔细读tomcat的catalina.bat,他会引用这个JAVA_HOME,很多时候像tomcat这类程序是为了能够在各个环境中都能够顺利运行,才定义了JAVA_HOME,因为在开发中有一个原则那就是:
绝对路径是肯定正确的,而相对路径永远是不确定的。
tomcat之类都会在bat里直接或者间接引用JAVA_HOME,为什么叫JAVA_HOME而不是JAVA_BASE之类这是一种约定,没有为什么。你应该会在bat里看见set JAVA_HOME = "C:\JDK\jdk5\"之类,一般在tomcat的安装版bat中可以找到类似的语句,你如果装过tomcat的windows安装版本而切机器上没有配制过JDK的JAVA_HOME,就会弹出个对话框说你没有安装JDK之类的,然后退出tomcat安装,这就是一个利用JAVA_HOME系统变量的很好例子,windows安装版的tomcat的安装程序会自动搜索系统变量中的JAVA_HOME变量,如果存在,则认为你是安装过JDK的,而且他会验证JDK版本是否符合安装的tomcat要求(tomcat5必须1.5以上的JDK)。当安装程序认为你已经配制了JDK以后,他会在bat的配制文件里加上set JAVA_HOME = "C:\JDK\jdk5\"之类的语句,这是一个bat的环境变量赋值语句,用处是在你执行批处理的时候定义一个临时的系统变量JAVA_HOME,根据这个临时变量,后面的%JAVA_HOME%都会使用这个变量的路径。这里需要清楚的就是,如果你在bat里set JAVA_HOME了,那么这个bat运行的时候将会使用这个临时的JAVA_HOME而不会使用系统中原先配制好的JAVA_HOME了。
总结就是
环境变量怎么配制,取决于你到底想要怎么用,只要你理解了环境变量的含义,这东西会很好用。需要注意的是环境变量环境变量,看清楚是一个变量,那么意思就是说,他不单单可以定义一个路径,也可以定义一个具体的值。你完全可以定义一个全系统的公共值,比如说set RMB_TO_DOLL = 8 呵呵。。重在理解啊。
luffyke 2009-12-04
  • 打赏
  • 举报
回复
一个环境变量而已!
caryyu 2009-12-04
  • 打赏
  • 举报
回复
j12090518 2009-12-04
  • 打赏
  • 举报
回复
深奥
fzp_JOY 2009-12-04
  • 打赏
  • 举报
回复
原来还有这么多事,以前只是能用就行.出问题再解决.
呵呵,帮顶.
flatcat 2009-12-04
  • 打赏
  • 举报
回复
就像樓上有些兄弟所說的,那是因為你所執行的批處理檔直接或間接使用了Java_Home這個環境變量,你可以
仔細閱讀批處理檔的內容。
wangbaosun 2009-12-04
  • 打赏
  • 举报
回复
呵呵,对不起,我刚才把path粘贴错了,我的系统里是有bin的,不过还是那句话,为什么tomcat需要加java_home呢?而不像phyerbarte所说的“javac.exe -version (因为PATH里已经定好了这个bin的位置)”这不就可以省配了一个java_home吗?
phyerbarte 2009-12-04
  • 打赏
  • 举报
回复
补充一句为什么叫JAVA_HOME貌似就是一种约定。。
谁是莫默的呢 2009-12-04
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 yunjie098359 的回复:]
引用 31 楼 wangbaosun 的回复:
phyerbarte,非常感谢你的回答,不过你们还是不明白我的意思,我说的前提是我已经配置了path环境变量为什么还要在配置java_home,path=C:\Program Files\Java\jdk1.6.0_02
按道理来说配置java_home与配置path不是一个道理吗,tomcat不就是想要java的环境吗?从path里读不就行了吗?干嘛多此一举又增加个java_home呢?

你的path为什么写的是JDK的根目录,path环境变量里配置的都是bin目录吧,作用是在命令行方式下执行.exe命令时不必转到该命令所在目录下,例如:你在命令行用javac.exe命令编译一个.java文件,如果不配置path=C:\ProgramFiles\Java\jdk1.6.0_02\bin的话,你必须要转到C:\ProgramFiles\Java\jdk1.6.0_02\bin这个目录里才能执行javac.exe命令,因为windows找不到你要执行的命令在哪儿。如果配置了这个环境变量就不必了,在任何地方都可以javac.exe了,其实就是告诉windows去哪儿找你要执行的命令。至于java_home,我感觉只是一个环境变量,如果你写了java_home=C:\ProgramFiles\Java\jdk1.6.0_02,那么在path里就可以简写成path=“%java_home%\bin”,如果你有多个版本的jdk需要经常切换,那么这样写也是很方便的,不用逐个去改用到jdk的地方,只需将java_home改掉就可以了,写代码的时候用常量表示一些固定值不也是这个原因的吗?有些工具确实会用到java_home这个环境变量,就比如tomcat6.0(释放版),其实tomcat6.0安装版也是要用的,只是在安装过程中自动找到了系统中注册的jdk,不用你显式的去配置,至于为什么用就得去研究tomcat了,但是我觉得它就是一个变量名,如果TOMCAT需要的不是java_home而是别的什么变量名字,你也只是将java_home改成tomcat需要的那个变量名字罢了,但没有java_home这么直观,容易理解罢了,这好像也是一种约定俗成的东西,一种规范。
[/Quote]

貌似就这么回事!ding
加载更多回复(35)

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧