深入Java2 SDK原始码(一)(转) - 中国WEB开发者网络 (http://www.webasp.net) -- 技术教程 (http://www.webasp.net/article/) --- 深入Java2 SDK原始码(一)(转) (http://www.webasp.net/article/8/7006.htm) | ||||||||||||||||||||||||||||||||||||
| -- 作者:未知 -- 发布日期: 2003-07-26 | ||||||||||||||||||||||||||||||||||||
| 王森 台湾交通大学科技管理研究所 moli.mt88g@nctu.edu.tw █前言 到目前为止,Sun Microsystems的网站上只释出了Java2 SDK 1.3 Win32版本的原始码,而Java2 SDK Solaris/Linux版本的原始码最多只到1.2.2。因此本文内容只适用于Java2 SDK 1.3的Win32版本原始码。所有的操作皆在Windows 2000 Professional操作系统上经过测试。如果您在不同的平台上验证本文内容,或是使用将来释出的Solaris版本、Linux版本的原始码。我们无法保证会有相同的结果。 █简介 据说信息社会的演进有个lifecycle,从早期每个人的办公桌上只有一部终端机的时代慢慢进步到PC时代,然后我们发现逐渐地潮流又走回NC(Network Computer),厂商鼓吹thin client的时代。对于原始码的看法亦是如此,从早期厂商在出售的机器内附上程序原始码供顾客自行修改,然后渐渐地程序代码变成厂商独有而不愿公开的资产,最后又演变成大家鼓吹Open Source、Free Software的时代。姑且不论普罗大众是否真的有兴趣去trace附在您计算机之中的原始码,但是我想这就是开放原始法最可贵的地方 – 大家都有机会一窥系统的内部行为,自己计算机上资料的安全以及程序的运作方式再也不会掌控在特定厂商的手上,有了原始码,我们在也不用怀疑是否某个厂商的操作系统或是应用程序会偷偷地在背后将您的资料回传到他们公司的服务器中。 随着这股开放原始码的潮流,Java2 SDK的原始码其实已经release出来很长一段时间了,但是采用的License为Sun Community Source Code License(SCSL),与一般我们讨论到Open Source时所会提到的General Public License(GPL)有所不同。相信最近大家会发现,在相关文章中也开始提及将Java SDK改用General Public License释出的议题。当今年10月Sun将Star Office的原始码以General Public License释出之后,接下来大家所期待的就是Sun将Java SDK的原始码以General Public License释出,如果此事成真,那幺Java今后的发展将不是我们目前所能预测的,如果成功,那幺Java会像Linux一样展翅高飞,如果没有成功,那幺将可能像Mozilla计划一般雷声大雨点小。 先姑且不论哪个License比较open,哪个比较free,笔者撰写此系列文章的目的只有一个,就是挖掘出存在于Java2 SDK内部的运作机制。由于笔者从事Java的教育工作已有一段时间,教过的学生越多,越是深感自己对Java的认识仍然有限,举凡我们常用的执行档(exe,例如javac.exe、java.exe等)、几个重要的动态连结函式库(dll,例如jvm.dll、java.dll等),以及其它使用Java程序语言所撰写的套件(package,例如java.io、java.util等),这些都是我想认真去了解的课题,因而有本系列的诞生。 当然,trace别人的程序代码这种事情乍看之下有点像是程序黑手在做的事情,但是笔者深深觉得,台湾的软件工业要站上国际舞台仍然需要很长一段时间。从大观点来看,系统分析、系统设计、系统测试、如何妥善地分配有限人力这些议题上,至少我们还没有办法举出哪些国内公司将这些工作做的十分出色,从Java2 SDK的原始码结构中,我们可以看到开发一套SDK(Software Development Kit)时采用的团队组织架构之缩影,原始码的位置怎幺放? 那幺多程序设计师写出来的程序如何整合在一起发挥纵效? 如何让文件的产生自动化? 我想我们一定可以从Java2 SDK的原始码得到一些答案。从小观点来看,如何善用Design Pattern? 如何写出有效率的程序代码? 如何让程序设计师写出来的程序代码具有一致性? 我们都知道Java内部的套件大量地使用了Design Pattern,我们也知道Java因为虚拟机器的关系,所以程序代码必须非常地有效率,相信这些问题也能够从Java2 SDK的原始码获得答案。 大力推展Open Source的开发中国家也非常清楚,开放原始码将是开发中国家赶上已开发国家软件工业的终南快捷方式。期待个人的努力可以成为这个大革命中一颗不可或缺小螺丝钉。 在本系列的第一篇中,笔者将介绍Java2 SDK原始码的概观,先让读者具有取得Java2 SDK原始码并能够成功编译这些原始码的能力。废话不多说,让我们开始吧! █如何取得Java2 SDK 原始码 要取得Java2 SDK的原始码,首先您必须要是Java Developer Connection(JDC)的一员,所以请您先到http://developer.java.sun.com/developer/网站上注册,取得使用者ID和密码。如下图所示: http://www.csdn.net/expert/wangsen/artic01.jpg 当您成功成为Java Developer Connection(JDC)的一员之后,请您到http://www.sun.com/software/communitysource/java2/,您将会看到下载Java2 SDK原始码的选项,点选进去之后,输入您在Java Developer Connection(JDC)的使用者ID和密码,确认您接受License之后,就可以开始下载Java2 SDK的原始码。如下图所示: http://www.csdn.net/expert/wangsen/artic02.jpg █Java2 SDK 原始码之架构 当您解开Java2 SDK原始码的压缩档之后,您会看到如下图所示的目录结构: http://www.csdn.net/expert/wangsen/artic4.gif
█如何编译Java2 SDK 原始码 当我们深入了解Java2 SDK原始码之后,很多工程师必定想自己尝试修改原始码,然后进行编译,我想这是身为一个工程师最大的乐趣。当然,在我们还没有修改之前,我们也必须试着编译整个原始码,顺便测试一下原始码是否完整,因此接下来要介绍编译Java 2原始码的准备步骤和方法。 要顺利编译Java2 SDK原始码,您必须符合底下几种条件:
当大家将所有必备的条件都准备妥当之后,接着我们要开始准备编译前的相关工作。底下的内容将有下列假设:
接下来我们要设定环境变量,为了方便起见,请大家新增一个叫做env.bat的批次档,这样以后要修改环境变量的时候就不必大费周章: 如果您使用的C编译器为Microsoft Visual C++ version 6.0,那幺env.bat的内容如下: env.bat
如果您使用的C编译器为Microsoft Visual Studio 97,那幺env.bat的内容如下: env.bat
任何一个环境变量设定有误,都会造成编译错误,请读者们务必小心。关于环境变量,底下有几件事情请读者一定要注意:
当上述准备工作全部完成之后,请开启”命令提示字符”窗口(就是DOS窗口啦!),并将目录切换到d:\jdk1.3-src\build\win32底下,在命列上输入 nmake world 此时编译Java2 SDK原始码的过程正式展开,毫无疑问地,这将是一个漫长的过程。 在编译的过程之中,在笔者的计算机上出现了一些编译错误,在这里顺便向各位提及,顺便说明笔者的解决办法:
当编译工作告一段落之后,您将可以在jdk1.3-src\build\win32目录下找到所有编译过的执行档以及 .class档,还有一些编译过程中产生的中间档。 jdk1.3-src\build\win32\bin目录下,您将会看到所有让Java2 SDK正常运作的执行文件以及动态联结函式库。又由于我们是使用make world指令,如果您观察一下这个目录,您会发现每个档案都有最佳化版本与除错版本(ex: java.exe与java_g.exe,其它以此类推)。 jdk1.3-src\build\win32\lib目录下将放置所有让Java程序能够顺利执行的套件函式库,例如i18n.jar等,在jdk1.3-src\build\win32\lib\ext目录下可以找到iiimp.jar等扩充套件还有一些资源档。 jdk1.3-src\build\win32\classes目录下放置了最后会压缩成rt.jar的所有 .class檔(类别档)。 另外,除了输入 nmake world 指令之外,Makefile之中定义了其它非world的编译选项,请参阅下表:
如果您想要了解所有的选项,请您自行开启jdk1.3-src\build\win32\Makefile或是jdk1.3-src\build\win32\makefiles\defs.nmk这两个档案做更深入的研究。 █接下来 有关Java2 SDK原始码的概观介绍就到这里,相信大家都已经有了坚实的基础,如果您已经是一位非常有经验的工程师,相信您已经能够随意地修改出自己版本的Java2 SDK了! 今后的文章中笔者将继续带各位深入实际的程序代码之中,让大家了解您所撰写的Java程序是如何转成byte code,然后再变成 .class檔;笔者也会带大家了解 .class档是如何被加载,经过了何种处理程序,最后如何被Java虚拟机器所执行。相信这些都是大相很感兴趣的议题,咱们下次见! █网络资源 ◎网站
| ||||||||||||||||||||||||||||||||||||
| webasp.net |