深⼊Java2SDK源码(⼀)
深⼊ Java2 SDK源码(⼀)
Java2 SDK源码概观
作者 : 王森 (国⽴交通⼤学科技管理研究所)
到⽬前为⽌,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(N
etwork Computer),⼚商⿎吹thin client的时代。对於源码的看法亦
是如此,从早期⼚商在出售的机器内附上程式源码供顾客⾃⾏修改,然
後渐渐地程式码变成⼚商独有⽽不愿公开的资产,最後⼜演变成⼤家⿎吹
Open Source、Free Software的时代。姑且不论普罗⼤众是否真的有兴趣
去 trace附在您电脑之中的源码,但是我想这就是开放原始法最可贵的
地⽅ – ⼤家都有机会⼀窥系统的内部⾏为,⾃⼰电脑上资料的安全以及
程式的运作⽅式再也不会掌控在特定⼚商的⼿上,有了源码,我们在也
不⽤怀疑是否某个⼚商的作业系统或是应⽤程式会偷偷地在背後将您的资
料回传到他们公司的伺服器中。
随著这股开放源码的潮流,Java2 SDK的源码其实已经release出来
很长⼀段时间了,但是采⽤的License为Sun Community Source Code Lic
ense(SCSL),与⼀般我们讨论到Open Source时所会提到的General Publi
c License(GPL)有所不同。相信最近⼤家会发现,在相关⽂章中也开始提
及将 Java SDK改⽤General Public License释出的议题。当今年10⽉Sun
将 Star Office的源码以General Public License释出之後,接下来⼤
家所期待的就是 Sun将Java SDK的源码以General Public License释出sdk
,如果此事成真,那么Java今後的发展将不是我们⽬前所能预测的,如果
成功,那么Java会像Linux⼀样展翅⾼飞,如果没有成功,那么将可能像M
ozilla计划⼀般雷声⼤⾬点⼩。
先姑且不论哪个License⽐较open,哪个⽐较free,笔者撰写此系列⽂
章的⽬的只有⼀个,就是挖掘出存在於 Java2 SDK内部的运作机制。由於
笔者从事Java的教育⼯作已有⼀段时间,教过的学⽣越多,越是深感⾃⼰
对Java的认识仍然有限,举凡我们常⽤的执⾏档(exe,例如、j
<等)、⼏个重要的动态连结函式库(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因为虚拟 机器的关系,所以程式码必须⾮常地有效率,相信这些问题也能够从Java 2 SDK的源码获得答案。
⼤⼒推展Open Source的开发中国家也⾮常清楚,开放源码将是开发
中国家赶上已开发国家软件⼯业的终南捷径。期待个⼈的努⼒可以成为这
个⼤⾰命中⼀颗不可或缺⼩螺丝钉。
在本系列的第⼀篇中,笔者将介绍Java2 SDK源码的概观,先让读者
具有取得 Java2 SDK源码并能够成功编译这些源码的能⼒。废话不多
说,让我们开始吧 !
█如何取得Java2 SDK 源码
要取得Java2 SDK的源码,⾸先您必须要是Java Developer Connecti
on(JDC)的⼀员,所以请您先到
er/⽹站上注册,取得使⽤者ID和密码。当您成功成为Java Developer Co nnection(JDC)的⼀员之後,请您到
nitysource/java2/,您将会看到下载Java2 SDK源码的选项,点选进去 之後,输⼊您在Java Developer Connection(JDC)的使⽤者ID和密码,确 认您接受 License之後,就可以开始下载Java2 SDK的源码。
█Java2 SDK 源码之架构
当您解开Java2 SDK源码的压缩档之後,您会看到如下图所⽰的⽬录
结构 :
◇build⽬录
放置了所有的makefile档,这些makefile为Visual Studio内附的nmake
.exe所能解读的格式。通常makefile的档名有五种,分别是Makefile、*. nmk、*.jmk(指定要编译的 .java档)、*.cmk(指定要编译的 .c档)、*.mk
。在 build/share底下您还可以到⼀些 .java档。
由於我们要编译的是Windows作业系统下的Java SDK,所以Makefile的 主档为 build/win32/Makefile,整个Java2 SDK的编译流程都是根源於这 个档案,在 build/win32/makefiles⽬录之下您可以到共⽤的Makefile ,通常附档名为 .nmk。
build/win32⽬录下的makefile都是⽤来建造和Windows作业系统相关的 程式。⽽在 build/share⽬录底下就多为 .mk、.jmk、.cmk档,这些档案 通常⽤来建造和 Windows作业系统⽆关的程式。
◇ext⽬录
这个⽬录底下放置了⽤来⽀援Java2 SDK函式库的makefile与源码,
这些源码皆使⽤ Java程式语⾔所撰写。
ext/i18n⽬录下放置了与国际化(internationalization)相关的函式库
,这些编译过的档案最後都被放到 i18n.jar⾥头。
ext/jpda⽬录下放置了与Java平台除错器架构(Java Platform Debugge
r Architecture)相关的档案。
◇src⽬录
这个⽬录放置了所有建构Java SDK所需要⽤到的 .c档(以C程式语⾔撰
写 )以及 .java档(以Java程式语⾔撰写)。
src/win32⽬录下都是⽤来建造和Windows作业系统相关的源码。⽽在
src/share⽬录底下就多为与Windows作业系统⽆关的源码。因此聪明的 读者们应该可以猜到⼤部分 Java标准套件的源码⼤多放在src/share⽬
录之下。这些标准套件的源码在最後都被加⼊到 src.jar之中,⽽编译
过的 .class档则被打散放⼊许多不同的jar档内。
◇LegalReadme.html
Sun Community Source Code License版权宣告
◇
Java2 SDK源码中所有档案的列表。
◇README.html
关於Java2 SDK源码的说明,该内容⼤部分都已经被笔者吸收⽽整合
到这篇⽂章之中。
从Java2 SDK源码的架构中,我们可以发现其档案的放置⽅法很独特
,是采⽤makefile与源码分开放置的做法,不同於⼀般我们所见(例如L
inux kernel源码)采makefile和源码放在⼀起的做法。这两种做法各
有利弊。以Linux Kernel源码的做法,每次编译完成之後,您将看到原
始码档案和编译过程中产⽣的中间档混杂在⼀起,感觉有点混乱。如果我
们采⽤ Java2 SDK源码的⽬录结构,每次编译出来的中间档和源码就
会分隔在不同的⽬录下,看起就⾮常赏⼼悦⽬,但是,这样放置的代价就
是 makefile⾥头对於路径的参照变得⼗分复杂,您将会在Java2 SDK原始 码的makefile中发现很多 ../../../src 的叙述,看起来真是不舒服,如
果我们要了解该执⾏档是由哪些档案构成的时候就很⾟苦了。
█如何编译Java2 SDK 源码
当我们深⼊了解Java2 SDK源码之後,很多⼯程师必定想⾃⼰尝试修
改源码,然後进⾏编译,我想这是⾝为⼀个⼯程师最⼤的乐趣。当然,
在我们还没有修改之前,我们也必须试著编译整个源码,顺便测试⼀下
源码是否完整,因此接下来要介绍编译Java 2源码的准备步骤和⽅法
。
要顺利编译Java2 SDK源码,您必须符合底下⼏种条件:
(1) 作业系统
您必须在Windows NT 4.0或是Windows 2000上才能顺利编译Java 2原始 码。⼀旦编译完成之後,所产⽣的执⾏档或是动态连结和式库将能够在所
有的 Win32作业平台上执⾏。
(2) 硬体设备
在Java2 SDK源码内附的⽂件之中,建议的硬体设备为Pentium等级的
处理器,配上⾄少 128 MB的记忆体。在笔者的电脑上,Pentium III 450 配上 PC 100 128 MB 的记忆体,总共花了将近2.5个⼩时完成所有编译动 作。如果算上编译时期遇到的⼀些错误以及恢复错误的时间,⼤概花了 3
个⼩时。
(3) 开发⼯具
我们必须准备⼏项⼯具,他们分别是:
- Microsoft Visual C++ version 6.0,并配上最新的Service pack(
或者 Visual Studio 97配上Service Pack 3)。
在Java2 SDK源码之中,存在有许多与Windows平台相关的程式码,这
些程式码都以 C语⾔撰写⽽成,为了顺利编译这些原⽣程式码,我们必须
要借助Visual C++编译器以便产⽣能在Windows平台上执⾏的执⾏档(.exe )以及动态连结和式库(.dll)。
同时,Java2 SDK源码之中有许多Makefile,这些Makefile是⽤来控
制所有程式的编译动作。我们必须借助 Visual C++内附的这个 ⼯具以帮助我们解读这些 Makefile并顺利编译出整个Java2 SDK。
- MKS Toolkit version 5.2以上的版本。
MKS Toolkit是⼀套能够在Windows上模拟UNIX执⾏环境的⼯具,请到ht tp://www.mks下载这套
⼯具的30天试⽤版(正式版必须要付费)。或者
如果您有订阅MDSN Profession以上的版本,您可以在光碟中到Microso
ft Windows Services for UNIX 2.0 Add-On Pack(在UNIX20_INSERV/3RD PARTY/MKS⽬录底下,执⾏x86⼦⽬录中的即可安装)。30天试⽤ 版的功能骑⼠和付费版本的功能⼀样,只不过当您在编译 Java2 SDK原始
码的时候,只要⽤到了 MKS Toolkit⾥的⼯具,就会出现⼀个⼴告画⾯罢
了,应该不会影响您的⼼情才是。
- Java2 SDK 1.3的可执⾏版本。
相信读者们看到这个地⽅,⼀定会觉得很疑惑。奇怪,编译Java2 SDK
的源码竟然也需要 Java2 SDK的协助? 不禁让⼈想起鸡⽣蛋蛋⽣鸡的问
题,不是吗? 其实Java2 SDK在整个编译过程中,扮演的是bootstrap com
piler(靴带式编译器)的⾓⾊。之所以需要Java2 SDK的原因是因为⼤家在
编译 Java程式时所使⽤的核⼼程式竟然也是⽤Java撰写⽽成的
,由於 Java2 SDK的源码有许多与平台⽆关、以Java程式语⾔所撰写的
程式,因此在编译初期,我们必须借助过去旧版的Java2 SDK或是JDK帮助
我们产⽣新版的Java2 SDK,再利⽤新产⽣的新版编译Java2 SD
K源码内的其他 .java档。
(下期续)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论