快速业务通道

管理Java类路径(UNIX和Mac OS X) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
) {    Fraction f = new Fraction();    // ...   } }

该类使用的是与 MainFrame 类所在的包不同的包中的 com.elharo.math.Fraction 类。源设置现在应该如图 3 所示(我将编译后的输出从之前的步骤中删除了。但这没有关系,因为我总是能重新编译它)。

图 3. 几个包的源结构

管理Java类路径(UNIX和Mac OS X) - 编程入门网

现在来看一下试着像以前一样编译 MainFrame.java 会出现什么情况。

清单 2. 编译 MainFrame.java

$ javac -d bin src/com/elharo/gui/MainFrame.java src/com/elharo/gui/MainFrame.java:3: package com.elharo.math does not exist import com.elharo.math.*; ^ src/com/elharo/gui/MainFrame.java:7: cannot find symbol symbol : class Fraction location: class com.elharo.gui.MainFrame   private Fraction f = new Fraction();       ^ src/com/elharo/gui/MainFrame.java:7: cannot find symbol symbol : class Fraction location: class com.elharo.gui.MainFrame   private Fraction f = new Fraction();               ^ 3 errors

管理Java类路径(UNIX和Mac OS X)(4)

时间:2011-01-04 IBM Elliotte Harold

出现清单 2 中的错误的原因是,虽然 javac 知道到何处可以找到 MainFrame.java,但它却并不知道到何处可以找到 Fraction.java(您可能觉得它应该具备足够的智能来识别匹配的层次结构,但事实并非如此)。为了给它提供一些线索,必须指定源路径。用源路径指定编译器应该到哪些目录查找源文件的层次结构。在清单 2 中,源路径是 src。所以我使用了 -sourcepath 选项,如下所示:

$ javac -d bin -sourcepath src src/com/elharo/gui/MainFrame.java

现在再编译程序,就不会出现错误,并会产生如图 5 所示的输出。请注意 javac 也编译了文件 Fraction.java,Fraction.java 被当前编译的文件引用。

图 4. 多类输出

管理Java类路径(UNIX和Mac OS X) - 编程入门网

在源路径中编译多个目录

在源路径中可以有多个目录,使用冒号分隔各目录,但通常没有必要这么做。例如,若我想包括本地的 src 目录和用来存放另一个项目的源代码的 /Users/elharo/Projects/XOM/src 目录,我可以这样进行编译:

$ javac -d bin -sourcepath src:/Users/elharo/Projects/XOM/src   src/com/elharo/gui/MainFrame.java

该命令并不编译在这两个层次结构中所找到的每个文件。它只编译由单个的 .java 文件直接或间接引用的文件,而此 .java 文件必须被编译。

更常见的情况是,为 .java 文件用一个单一的源目录,为类或放置了预编译的第三方库的 JAR 归档文件用多个目录。而这正是类路径的作用所在。

设置类路径

在大中型项目中,每次都要对每个文件进行重编译会非常耗时。为减少这种编译负担,可以在不同的 bin 目录分别编译和存储相同项目的独立部分。这些目录被添加到类路径。

将类添加到类路径有几种方法可选。但您只能使用 -classpath 命令行开关。例如,假设我想从另一个之前已经编译到目录 /Users/elharo/classes 的工程导入文件,那么我会向命令行添加 -classpath /Users/elharo/classes,如下所示:

$ javac -d bin -sourcepath src -classpath /Users/elharo/classes   src/com/elharo/gui/MainFrame.java

现在假设需要添加两个目录,/Users/elharo/project1/classes 和 /Users/elharo/project2/classes。那么我将包含它们并使用冒号将它们分隔开,如下所示:

$ javac -d bin -sourcepath src   -classpath /Users/elharo/project1/classes:/Users/elharo/project2/classes   src/com/elharo/gui/MainFrame.java

当然,您也可以使用自己喜欢的各种相对路径的格式。比如,如果 project1 和 project2 是当前工作目录的同级目录(即它们有相同的父目录),

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号