Java开发者工具包
Java 在过去一年中以其承诺创建可在任何平台上以单个二进制文件运行,并在分布式网络环境中安全使用的软件,席卷了互联网和编程社区。
Java 的概念很简单:单个源代码文件被编译成包含 Java 字节码的单个伪二进制文件。这个二进制文件可以在任何存在 Java 解释器或其他运行时引擎的平台上运行。
为了开发和测试这些 Java 应用程序,有必要访问几个关键的开发工具,包括编译器、调试器和用于测试应用程序的 Java 解释器。已经存在许多 Java 开发环境——主要用于 MS-Windows 系统。这些完整的专业开发工具由 Borland 和 Symantec 等公司生产。对于 Linux 和一般的 Unix,这种类型的商业开发工具尚未普及。
然而,这并不意味着 Linux 用户无法开发 Java 小程序和应用程序。Sun Microsystems 开发了一个免费的 Java 开发者工具包 (JDK),其中包括编译器、调试器、运行时环境和一个用于测试嵌入在网页中的 Java 小程序的 Applet 查看器。
Java 开发者工具包最初由 Sun 为 SPARC、Solaris 和 Windows NT/95 开发。这些版本的工具包,以及更新的 x86 Solaris 和 MacOS 版本,可从 JavaSoft 网站 http://www.javasoft.com/ 获取
Sun 还允许其他组织将 JDK 移植到其他平台。Blackdown 组织(Randy Chapman)已将 JDK 1.0.1 版本移植到 Linux,并为 x86 版本的 Linux 提供二进制文件。Linux 的 JDK 发行版可从 ftp://ftp.blackdown.org/pub/Java/linux/ 获取。Blackdown 还有一个网页,网址为 www.blackdown.org/。在该网站上,您将找到三个文件
linux.jdk-1.0.1-try3.common.tar.gz linux.jdk-1.0.1-try3.static-motif-bin.tar.gz linux.jdk-1.0.1-try3.shared-motif-bin.tar.gz
需要下载这三个文件中的两个
linux.jdk-1.0.1-try3.common.tar.gz
加上以下两者之一
linux.jdk-1.0.1-try3.static-motif-bin.tar.gz
或
linux.jdk-1.0.1-try3.shared-motif-bin.tar.gz
最后一个文件需要 Motif 库(libXm.so.2)2.0 版本的 ELF 二进制文件。如果您没有 Motif,请下载 linux.jdk-1.0.1-try3.static-motif-bin.tar.gz——它是一个较大的文件,但无论您是否拥有 Motif 库都可以工作。在本文中,我们将使用 linux.jdk-1.0.1-try3.static-motif-bin.tar.gz。
所有版本的 Java 开发者工具包还需要以下库,其中许多库可能已在您的系统上
/lib/libc.so.5.2.16
/usr/X11/lib/libX11.so.6.0
/usr/X11/lib/libXt.so.6.0
/usr/X11/lib/libXext.so.6.0
/usr/X11/lib/libXpm.so.4.3
/lib/libdl.so.1.7.9
如果您缺少任何这些库,JDK 将无法工作。这些库都可以在互联网上免费获得。
一旦下载了 “common” tar 文件和 Motif tar 文件之一,就需要解压缩它们。Linux JDK 的文档建议将 JDK 安装在 /usr/local 目录中(尽管它可以安装在其他位置)。为此,请使用以下命令将两个压缩的 tar 文件复制到 /usr/local
cp linux.jdk-1.0.1-try3.common.tar.gz /usr/local cp linux.jdk-1.0.1-try3.static-motif-bin.taR.GZ /usr/local
然后,可以使用以下命令解压缩和解压文件
tar xzvf linux.jdk-1.0.1-try3.common.tar.gz linux.jdk-1.0.1-try3.static-motif-bin.tar.gz
这将在 /usr/local 下创建一个 java/ 目录,其中包含四个子目录:bin、demo、include 和 lib。/usr/local/java 还将包含一个 zip 文件,其中包含源代码以及各种 README 和 HOWTO 文件。bin/ 目录包含用于执行 JDK 所有组件的脚本。组件包括
appletviewer:用于测试嵌入在 HTML 文档中的小程序的查看器。
javac:Java 编译器:将 Java 源代码编译为 Java 字节码二进制文件(称为 class 文件)。javac 生成的 class 文件可以在任何平台上的 Java 解释器上运行。
java:Java 解释器:用于在 Linux 下执行 Java class 文件。
jdb:Java 调试器:一个命令行调试器,目前处于 alpha 开发阶段。
java/bin 中的每个脚本实际上都调用 java/bin/i586 中的可执行文件。这些脚本期望某些工具存在于系统中的固定位置。具体来说,appletviewer 脚本期望 mkdir 在 /usr/bin 中,而 pwd 在 /bin 中。在某些系统上,情况可能并非如此(例如,在 RedHat 派生的系统中,您可能会在 /bin 中找到 mkdir)。解决这个问题有两种方法。一种是编辑 java/bin/appletviewer,并将 /usr/bin/mkdir 或 /bin/pwd 的不正确出现替换为这些程序的正确完整路径。
第二种解决方案是在 appletviewer 期望的目录中创建符号链接。例如,在 mkdir 在 /bin 中的 RedHat 系统上,可以使用以下命令在 /usr/bin 中创建符号链接
ln -s /bin/mkdir /usr/bin/mkdir
如果您希望经常使用 JDK 组件,您可能需要将 java/bin 目录添加到您的路径中。假设您将 JDK 安装在 /usr/local 下,并且您正在运行 bash shell(许多 Linux 发行版的默认 shell),您可以将以下行添加到您主目录中的 .bashrc 文件中
PATH=/usr/local/java/bin:$PATH export PATH
如果您正在运行 C shell,则在您主目录中的 .cshrc 文件末尾添加以下行即可完成此操作
setenv PATH /usr/local/java/bin:$PATH
虽然编程和开发 Java 应用程序和小程序的细节超出了本文的范围,但我们将简要介绍如何编译和运行 Java 应用程序和小程序。Java 源代码保存在扩展名为 .java 的文件中。编译后,将创建一个 class 文件(扩展名为 .class)。假设 java/bin 目录在您的路径中,如上所述,可以使用以下命令编译 Java 源代码文件
javac filename.java
应用程序的 Class 文件可以使用以下命令执行
java filename.class
小程序有点复杂。小程序作为网页的嵌入部分运行,并通过特殊的 <APPLET> 标签包含在网页中。您可以使用 appletviewer 或 Netscape Navigator 2.0 或 3.0 测试嵌入式小程序。使用 Navigator,只需从“文件”菜单中选择“打开”,然后打开包含嵌入式小程序的 HTML 文件。
使用 appletviewer,只需键入
appletviewer filename.html
运行小程序以及某些 Java 应用程序需要您在 X-Windows 环境中工作。如果您的系统上没有安装 X-Windows,您将无法测试小程序或任何使用 Java GUI 开发功能的应用程序。
在大多数 Linux 系统上,上述步骤应该足以使 JDK 启动并运行。但是,在某些系统上,您可能会遇到一些困难;下面概述了一些常见错误及其解决方案
您收到一条错误消息,指示 /dev/zero。设备 /dev/zero 需要具有全局读取和写入权限。使用以下命令设置这些权限
chmod 666 /dev/zero
您收到 “dirname: 参数过多” 或 “找不到类” 错误。您尝试运行的组件找不到本机 Java class 文件。JDK 使用环境变量 CLASSPATH 来查找这些文件。此变量在 java/bin/.java_wrapper 和 java/bin/appletviewer 中设置。但是,对于您的 shell,这些脚本在确定正确目录时遇到问题。您可以编辑这些文件,以便正确设置 CLASSPATH。
在 .java_wrapper 中,更改读取以下内容的行
J_HOME=`dirname $PRG`/..
为
J_HOME=/usr/local/java
(或您安装 JDK 的位置)appletviewer 中也需要进行类似的更改。
安装 Java 开发者工具包后,您可能需要更多关于开发 Java 应用程序和小程序的信息。除了 Sun 的官方 Java 主页 http://www.javasoft.com/ 之外,Gamelan 目录 (http://www.gamelan.com/) 提供了大量的小程序和应用程序(许多带有源代码)以及指向其他参考资料的指针。comp.lang.java 新闻组是一个高流量新闻组,许多 Java 专家和新手程序员都在积极使用它。
Arman Danesh (armand@juxta.com) 是一位技术记者,定期为世界各地的多家出版物撰稿。他在 南华早报 上撰写每周互联网专栏 “The Other World”,并在 The Dataphile 上撰写名为 “Trawling the Net” 的定期专栏。他是 Sams.net Publishing 出版的 Teach Yourself JavaScript in a Week 的作者。