`
datoplay
  • 浏览: 1649081 次
文章分类
社区版块
存档分类
最新评论

深入 Java2 SDK源码(一)

 
阅读更多

深入 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释出
,如果此事成真,那么Java今後的发展将不是我们目前所能预测的,如果
成功,那么Java会像Linux一样展翅高飞,如果没有成功,那么将可能像M
ozilla计划一般雷声大雨点小。

先姑且不论哪个License比较open,哪个比较free,笔者撰写此系列文
章的目的只有一个,就是挖掘出存在於 Java2 SDK内部的运作机制。由於
笔者从事Java的教育工作已有一段时间,教过的学生越多,越是深感自己
对Java的认识仍然有限,举凡我们常用的执行档(exe,例如javac.exe、j
ava.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因为虚拟
机器的关系,所以程式码必须非常地有效率,相信这些问题也能够从Java
2 SDK的源码获得答案。

大力推展Open Source的开发中国家也非常清楚,开放源码将是开发
中国家赶上已开发国家软件工业的终南捷径。期待个人的努力可以成为这
个大革命中一颗不可或缺小螺丝钉。

在本系列的第一篇中,笔者将介绍Java2 SDK源码的概观,先让读者
具有取得 Java2 SDK源码并能够成功编译这些源码的能力。废话不多
说,让我们开始吧 !

█如何取得Java2 SDK 源码

要取得Java2 SDK的源码,首先您必须要是Java Developer Connecti
on(JDC)的一员,所以请您先到http://developer.java.sun.com/develop
er/网站上注册,取得使用者ID和密码。当您成功成为Java Developer Co
nnection(JDC)的一员之後,请您到http://www.sun.com/software/commu
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版权宣告

◇OriginalCode.txt
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++内附的nmake.exe这个
工具以帮助我们解读这些 Makefile并顺利编译出整个Java2 SDK。
- MKS Toolkit version 5.2以上的版本。
MKS Toolkit是一套能够在Windows上模拟UNIX执行环境的工具,请到ht
tp://www.mks.com下载这套工具的30天试用版(正式版必须要付费)。或者
如果您有订阅MDSN Profession以上的版本,您可以在光碟中找到Microso
ft Windows Services for UNIX 2.0 Add-On Pack(在UNIX20_INSERV/3RD
PARTY/MKS目录底下,执行x86子目录中的setup.exe即可安装)。30天试用
版的功能骑士和付费版本的功能一样,只不过当您在编译 Java2 SDK原始
码的时候,只要用到了 MKS Toolkit里的工具,就会出现一个广告画面罢
了,应该不会影响您的心情才是。
- Java2 SDK 1.3的可执行版本。
相信读者们看到这个地方,一定会觉得很疑惑。奇怪,编译Java2 SDK
的源码竟然也需要 Java2 SDK的协助? 不禁让人想起鸡生蛋蛋生鸡的问
题,不是吗? 其实Java2 SDK在整个编译过程中,扮演的是bootstrap com
piler(靴带式编译器)的角色。之所以需要Java2 SDK的原因是因为大家在
编译 Java程式时所使用的javac.exe核心程式竟然也是用Java撰写而成的
,由於 Java2 SDK的源码有许多与平台无关、以Java程式语言所撰写的
程式,因此在编译初期,我们必须借助过去旧版的Java2 SDK或是JDK帮助
我们产生新版的Java2 SDK,再利用新产生的新版javac.exe编译Java2 SD
K源码内的其他 .java档。

(下期续)
分享到:
评论

相关推荐

    深入Java2 SDK源代码(1)

    深入Java2 SDK源代码(1)

    深入Java2 SDK源代码(3)

    在《深入Java2 SDK源代码(3)》这篇文章中,作者王森通过详细分析Java的package和make机制,帮助读者理解Java编译和运行时的重要概念。文章强调了遵守“每一个类都会根据其所属的package放在正确的相对路径上”的...

    快盘JAVA版SDK源代码.zip

    【标题】"快盘JAVA版SDK源代码.zip" 指的是一个包含了Java版本的快盘SDK(Software Development Kit)的源代码压缩包。快盘SDK通常是由云存储服务提供商提供的,它允许开发者通过编程接口与快盘服务进行交互,实现...

    Java SDK源代码

    2. **集合框架**:在`java.util`包中,集合框架是Java SDK的一个重要部分,它包含`List`, `Set`, `Map`等接口,以及对应的实现类,如`ArrayList`, `HashSet`, `HashMap`等。这些数据结构提供了存储和操作对象的方法...

    baidu云存储java sdk源码阅读之安全

    【标题】:“baidu云存储java sdk源码阅读之安全” 在阅读Baidu云存储Java SDK的源码时,我们关注的重点是其如何确保数据的安全性。Baidu云存储(Baidu BOS)提供了一种高效、可靠的云存储服务,而它的Java SDK则...

    java百度语音sdk

    总之,Java百度语音SDK是一个强大的工具,它使得开发者能够在Java应用程序中轻松集成语音识别功能,而无需深入理解复杂的语音识别算法。结合`json-20160810.jar`库,开发者可以高效地处理与服务端的交互,实现更智能...

    JAVA SDK源代码

    JAVA SDK源代码是Java开发工具包的核心组成部分,它包含了用于构建和运行Java应用程序的类库、接口和实现...总的来说,深入理解和研究JAVA SDK源代码对于任何Java开发者来说都是一项宝贵的技能,能显著提升其专业水平。

    海康安防系统SDK及实例源码_win64_java_海康门禁_C#_海康_海康安防系统SDK及实例源码_

    2. **Java和C#实例源码** 压缩包内包含的C#和Java实例源码,是开发者了解如何使用SDK的绝佳起点。这些代码示例通常涵盖了基础操作,如设备连接、视频流获取、录像回放等,有助于快速上手。对于Java开发者,可以通过...

    畅捷通开放平台JAVA SDK源码.zip

    【标题】"畅捷通开放平台JAVA SDK源码" 提供的是一个用于与畅捷通开放平台进行交互的Java开发工具包(SDK)的源代码。这个SDK是开发者用来集成畅捷通服务到他们的Java应用中的关键组件。通过这个SDK,开发者可以轻松...

    android_sdk源码

    《深入剖析Android SDK 2.2源码》 Android SDK(Software Development Kit)是开发者构建、调试和优化Android应用程序的基础工具集。对于Android 2.2(Froyo)版本的SDK,其源码提供了对操作系统核心功能和API实现...

    android4.4SDK源码包

    通过学习和分析Android 4.4 SDK源码,开发者可以提高自己的编程技巧,更好地理解和定制Android系统,为创建更高效、更稳定的应用程序打下坚实的基础。同时,对于希望成为系统级开发者或从事ROM定制的人来说,源码...

    open-sdk-java-2.0.1_open_商城_有赞sdk_有赞商城_有赞_源码

    有赞SDK for Java 2.0.1 是一个专门针对有赞商城的开发工具包,旨在帮助开发者便捷地与有赞商城的API进行交互,从而快速构建和集成线上商城功能。这个开源版本提供了完整的源码,让开发者可以深入理解其工作原理,并...

    一、JAVA调用海康威视SDK实现摄像头预览

    本文将深入探讨如何使用JAVA调用海康威视SDK来实现摄像头的预览功能。海康威视作为全球领先的安防产品及解决方案提供商,提供了丰富的SDK供开发者进行二次开发,以满足各种定制化需求。 首先,我们需要了解海康威视...

    ucloud接口java-sdk开发

    `ucloud-java-sdk-master`这个压缩包文件包含了UCloud Java SDK的源码,开发者可以下载并导入到自己的项目中。通过引入SDK,你可以直接调用预定义的类和方法来执行各种操作,如创建、删除、查询云服务器(UHost)、...

    paypal-PayPal-Java-SDK

    在"paypal-PayPal-Java-SDK-5e7eb62"这个压缩包中,包含的两个主要项目——SDK源码包和DEMO,将帮助我们深入理解如何使用这个SDK。 **SDK源码包** SDK源码包是PayPal Java SDK的核心部分,它提供了与PayPal API...

    百度人脸识别windows java离线sdk

    在本文中,我们将深入探讨“百度人脸识别Windows Java离线SDK”的相关知识点,这是一款专为Windows平台设计的、基于Java的计算机视觉库,主要用于实现高效、精准的人脸识别功能。在人工智能领域,尤其是在计算机视觉...

    android4.0sdk源码

    《深入剖析Android 4.0 SDK...总结,Android 4.0 SDK源码是一个宝库,对开发者来说,深入研究源码不仅能提升技术深度,还能激发创新灵感。通过不断学习和实践,开发者可以掌握更多的技巧,编写出更加高效、稳定的应用。

    Java聚合支付源码

    通过学习和研究这套Java聚合支付源码,开发者可以深入理解支付系统的架构设计、安全策略以及多渠道整合的实现细节,这对于提升自身技能和开发实际项目非常有帮助。同时,它也可以作为一个基础模板,根据具体需求进行...

    dingtalk-sdk-java.zip

    2. taobao-sdk-java-auto_1479188381469-20200326-source.jar:这是一个源码jar包,包含了SDK的源代码,这对于开发者理解SDK的工作原理、调试和定制化需求非常有帮助。开发者可以通过查看源码,学习如何使用钉钉提供...

    AWS S3 SDK for Java开发指南V1.0

    同时,通过Javadoc和源码,可以深入了解每个类和方法的用法,以便更好地实现自定义功能。 总之,AWS S3 SDK for Java为开发者提供了强大的工具集,使其能够无缝地将Java应用程序与AWS S3服务集成,无论是XSKY EOS...

Global site tag (gtag.js) - Google Analytics