src/plugins/org.eclipse.platform/launchersrc.zip
这是eclipse的启动源码包,解压后有一个launchersrc/library目录,该目录中有一个文件eclipse.c(高一些的版本需要看的是eclipseMain.c),这就是eclipse的带有main函数的主文件,它和一个它依赖的文件最终编译成eclipse这个可执行文件。
eclipse是由java写成的,然而其启动文件却是一个平台可执行文件-elf/pe,那么一定是eclipse可执行程序启动了java环境。在这些c代码中,最终要调用一个函数:startJavaVM或者launchJavaVM,而这些函数最终有两种实现方式,一种是fork/exec+wait的方式,这样的话当你运行eclipse的时候ps或者查看进程管理器的时候就会发现有两个进程,一个是eclipse,另一个是javaw或者java,它主要的优点是可以自己定义java环境的所在地...另一种方式是直接调用JVM的接口启动java环境,就是类似java程序做的那样,它自己搜索java环境的所在,同时它也是可以指定参数的,程序相对比较紧凑一些。
既然eclipse只是一个壳,那么我们显然可以绕开这个壳,它无非就是一个和java程序类似的东西,只是更漂亮一些罢了。查看下面目录的源码,发现作者没有改变入口,仍然以main方法为入口,因此完全可以用java命令来启动:
src/plugins/org.eclipse.equinox.launcher/src/org/eclipse/core/launcher/Main.java
这个Main.java是eclipse的启动类,也是被调用的第一个类,其很简单地调用了下面的过程:
org.eclipse.equinox.launcher.Main.main(args);
在下面的目录可以找到这个被调用的main:
src/plugins/org.eclipse.equinox.launcher/src/org/eclipse/equinox/launcher/Main.java
最终invokeFramework方法被调用,一切正式开始。之所以将启动程序封装成一个平台相关的可执行文件(elf/pe等),其主要原因就是启动很方便,不需要进行命令行输入,任何的GUI上直接点击即可,并且还能定制平台相关的启动风格。使用java命令直接启动eclipse的方法如下:
java -jar $eclipse的目录/plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar
eclipse是一个可执行文件,它可能被病毒感染,然而即使它被感染了,直接使用java命令启动的IDE可能还是好的,除非java本身也被感染了...此时还可以自己写启动程序,除非jvm动态库被感染了,此时我们还可以重新下载,除非互联网被感染了!
本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1271168