|
2007 年 1 月 04 日 类路径是 java™ 平台中最复杂也最令人头痛的部分之一,但熟练掌握类路径对成为一名专业 java 程序员来说却又十分关键。在本文中,elliotte rusty harold 为您阐述了类路径和源路径的复杂性,并向您展示了如何在 unix 和 mac os x 中熟练掌握它们。如果您使用的是 windows,请参阅本文的 姊妹篇。 类路径可以连接 java 运行库和文件系统。它定义编译器和解释器应该在何处查找要加载的 .class 文件。它的基本思想是:文件系统的层次结构反映了 java 包的层次结构,而类路径则定义了文件系统中的哪个目录可以作为 java 包层次结构的根。 遗憾的是,通常文件系统非常复杂并依赖于平台,而且和 java 包也不能很好地匹配。这样一来,不论是新用户还是资深 java 程序员都深感类路径的棘手。没错,它的确不是 java 平台好的一面,它让您到了下班的时候还在忙于调试一个顽固的小问题。 当然采用 eclipse 这样的优秀 ide 可以减少管理类路径的一些困难,但只能说是一些,而且前提还必须是一切都正常(但这不大可能,因为总会有一些意外出现)。因此,每个 java 程序员都必须要全面了解类路径,惟有如此,才有希望调试类路径中所出现的问题。 在本文中,我给出了您所需要了解的有关 unix、linux 和 mac os x 中的 java 类路径(以及相关源路径)的全部内容。本文的 姊妹篇 则展示了 windows 上的类似技术。文中列出的步骤可以作为指南,并能解决出现的大多数问题。 包结构 要掌握类路径,首先应从其源代码入手。每个类都属于一个包,而此包必须 遵守标准的命名约定。简单地说,包的名称要由颠倒的两级域名开始,比如 com.example 或 edu.poly,之后是至少一个或多个单词用于描述包的内容。比方说,假设有一个域名为 elharo.com,如果要创建一个 fraction 类,可以将其放入如下包中: - com.elharo.math
- com.elharo.numbers
- com.elharo.math.algebra.fields
在颠倒的域名之后,需要使用单一单词的子包名。不要使用缩写形式,并要保证拼写正确。如果需要,可以使用拼写检查器。大部分与类路径相关的问题都是由在源代码中使用某个单词而在文件系统中使用的却是与之稍有不同的拼写或缩写而引起的。所以最好的做法就是总是使用拼写正确且没有缩写的名称。 整个包名称应该是小写的,即使该名称是在别处常采取大写形式的一些惯用名称和缩写词。windows 通常不区分文件名中的大小写,但 java 和一些 unix 文件系统却区分。如果需要在不同的系统间移动文件,大小写问题肯定会带来一些麻烦。包名称必须要全部由 ascii 字符组成。一些编译器也接受用 hebrew、cyrillic、greek 或其他脚本编写的包名称,但大多数文件系统并不接受;您稍后就会看到,这样的包名称必须担负充当目录名这样的双重任务。java 包和类名是 unicode,但很多文件系统(包括 fat)却不能识别 unicode。遗憾的是,fat 系统非常之多。如果只简单地用不同的默认编码将文件复制到系统将会使编译器和解释器无法找到正确的类。 - 将类放到包中。
- 严格遵守包和类的命名约定和大小写约定。
- 确保包的层次结构与目录的层次结构匹配。
- 总是对 javac 应用 -d 选项。
- 不要在 jre/lib/ext 内放任何东西。
- 不要在 jre/lib/endorsed 内放任何东西。
- 不要将 .java 文件与 .class 文件放在同一个目录。
- 不要将任何 .java 或 .class 文件放在当前的工作目录。
最后一点提示:很多耗时的类路径问题的起因大都是目录名拼写错误或从错误目录进行了编译。如果您不能找到问题的所在,可以问问周围的朋友或同事。以我的经验,自己发现自己的错误总是困难的,但这些错误在别人看来却显而易见。所以寻求他人的帮助也是一种切实有效的调试技巧。 类路径确实不是个简单的问题,但总会有相应的应对方法,所以它是完全可管理的。些许的谨慎加上对本文所介绍的命名约定、命令行参数和目录结构的注意,应该能够使您在问题最少的情况下编译和运行程序了。 参考资料 学习
- 您可以参阅本文在 developerworks 全球站点上的 英文原文 。
- “管理 java 类路径 (windows)”(elliotte harold,developerworks,2006 年 12 月):本教程的姊妹篇,介绍了如何在 windows 下设置类路径和源路径。
- “项目管理: maven 让事情变得简单”(charles chan,developerworks,2003 年 4 月):介绍如何使用 maven 进行项目管理。
- “ibm cloudscape:了解 java 类路径” (jean anderson and susan cline,developerworks,2004 年 9 月):介绍了如何为 cloudscape 和 derbyexplains 设置 java 类路径。
- “最佳实践: websphere application server 的 classpath 结构” (websphere best practices team,developerworks,2001 年 8 月):关于在 websphere application server 上管理类路径的建议。
- developerworks java 技术文档库:获得有关 java 平台的技术文章、技巧、教程、标准和 ibm 红皮书。
获得产品和技术
- 下载 ant:当前 apache 的顶级项目。
- 下载 maven:java 项目的 apache 构建管理器。
讨论
- 参与 developerworks 论坛。
- developerworks blog:加入 developerworks 社区。
关于作者
 | 
|  | elliotte rusty harold 来自新奥尔良,现在他还定期回老家喝一碗美味的秋葵汤。不过目前,他和妻子 beth 定居在纽约临近布鲁克林的 prospect heights,同住的还有他的猫咪 charm(取自夸克)和 marjorie(取自他岳母的名字)。他是 polytechnic 大学计算机科学的副教授,他在该校讲授 java 和面向对象编程。他的 web 站点 cafe au lait 已经成为 internet 上最流行的独立 java 站点之一,它的姊妹站点 cafe con leche 已经成为最流行的 xml 站点之一。 他最近编著的一本书是 java i/o, 2nd edition。他目前在从事处理 xml 的 xom api、jaxen xpath 引擎和 jester 测试覆盖率工具的开发工作。 |
|