简析eclipse启动过程
双击eclipse.exe
加载配置一些信息
寻找javaw.exe、jvm.dll
这里分几种情况讨论寻找过程
1.安装了jdk+jre,没有配置环境变量(jre安装目录为"D:\Program Files\Java\jre7\")
首先在exlipse.exe所在目录的寻找是否有.\jre\bin
没有这个目录
然后遍历系统环境变量path目录
在这个目录找到了"C:\Windows\System32\javaw.exe"
接着查找jvm虚拟机
以javaw.exe为当前工作目录,在javaw.exe下找有没有
.\j9vm
..\jre\bin\j9vm\
.\client
..\jre\bin\client\
.\server
..\jre\bin\server\
.\classic
..\jre\bin\classic\
.\jrockit
..\jre\bin\jrockit\
如果这些没有找到,则查注册表
HKLM\Software\JavaSoft\Java Runtime Environment
读取版本信息,读完之后
读该版本下RuntimeLib的值,然后查找有没有这个目录
最终找到了D:\Program Files\Java\jre7\bin\client\jvm.dll
以这个jvm.dll所在目录为准,返回两层确定jre的目录为D:\Program Files\Java\jre7\
再查找jre目录下有没有.\lib\i386这个目录,成功之后开始加载eclipse启动需要的jar文件(一般以org.eclipse开头)
2.安装了jdk+jre,path为jdk的bin目录(这里配置为"D:\Program Files\Java\jdk1.7.0_65\bin\")
首先在exlipse.exe所在目录的寻找是否有.\jre\bin
没有这个目录
然后遍历系统环境变量path目录
在这个目录找到了"D:\Program Files\Java\jdk1.7.0_65\bin\javaw.exe"
接着查找jvm虚拟机
以javaw.exe为当前工作目录,在javaw.exe下找有没有
.\j9vm
..\jre\bin\j9vm\
.\client
..\jre\bin\client\
查找到有D:\Program Files\Java\jdk1.7.0_65\jre\bin\client\这个目录
查找该目录是否有jvm.dll
最终找到D:\Program Files\Java\jdk1.7.0_65\jre\bin\client\jvm.dll
以这个jvm.dll所在目录为准,返回两层确定jre的目录为D:\Program Files\Java\jdk1.7.0_65\jre
再查找jre目录下有没有.\lib\i386这个目录,成功之后开始加载eclipse启动需要的jar文件(一般以org.eclipse开头)
eclipse3.1\plugins\org.eclipse.jdt.source_3.1.0\src\org.eclipse.jdt.core_3.1.0\src.zip|org\eclipse\jdt\internal\compiler
3.安装了jdk,没有安装jre,没有配置环境变量
首先在exlipse.exe所在目录的寻找是否有.\jre\bin
没有这个目录
然后遍历系统环境变量path目录
没有找到javaw.exe报错
4.只安装了jre
情况同1,eclipse会读取注册表的值来寻找jre的目录
问:那么用Eclipse开发需不需要安装jdk?如果不需要,那java文件时如何编译成class的?
不需要,eclipse的JDT里自带编译器,源程序在eclipse3.1\plugins\org.eclipse.jdt.source_3.1.0\src\org.eclipse.jdt.core_3.1.0\src.zip|org\eclipse\jdt\internal\compiler目录下(注意自己的版本号)
问:"C:\Windows\System32\"为什么会有javaw.exe这个文件?
安装jre的时候安装程序复制了4个文件到"C:\Windows\System32\"目录,分别是java.exe、javaw.exe、javaws.exe和WindowsAccessBridge.dll.也就是说用java -version命令和java [class文件名]验证jdk的path环境变量并不靠谱,用javac 命令才是最准确的
问:查找jre目录下有没有.\lib\i386这个目录的作用?
确定使用的jre是32位的还是64位的,64位的Eclipse不能用32位的jre