`
xinklabi
  • 浏览: 1564010 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
文章分类
社区版块
存档分类
最新评论

javac -classpath的使用

    博客分类:
  • Java
 
阅读更多
javac -classpath的使用: 

javac:如果当前你要编译的java文件中引用了其它的类(比如说:继承),但该引用类的.class文件不在当前目录下,这种情况下就需要在javac命令后面加上-classpath参数,通过使用以下三种类型的方法 来指导编译器在编译的时候去指定的路径下查找引用类。 

(1).绝对路径:javac -classpath c:\junit3.8.1\junit.jar   Xxx.java 
(2).相对路径:javac -classpath ..\junit3.8.1\Junit.javr  Xxx.java 
(3).系统变量:javac -classpath %CLASSPATH% Xxx.java (注意:%CLASSPATH%表示使用系统变量CLASSPATH的值进行查找,这里假设Junit.jar的路径就包含在CLASSPATH系统变量中) 

javac 绝对路径的使用: 

javac:假设你要编译的类文件名叫:HelloWorld.java,其完全路径为:D:\java\HelloWorld.java。但你所在的当前目录是:C:\Documents and Settings\peng>。如果想在这里执行编译,会有什么结果呢? 

(1).C:\Documents and Settings\peng> javac HelloWorld.java 这时编译器会给出如下的错误提示信息: 
error: cannot read: HelloWorld.java 
这是因为默认情况下javac是在当前目录下查找类文件,很明显这个路径不是我们存放类文件的地方,所以就会报错了 
        
(2).C:\Documents and Settings\peng>javac D:\java\HelloWorld.java 
这时编译成功。 
所以,只要你执行javac命令的目录不是类文件存放的目录,你就必须在javac命令中显式地指定类文件的路径。 

java -classpath的使用: 

java:假设我们的CLASSPATH设置为:D:\peng\java\pro ,在该目录下有三个文件:HelloWorld.java / HelloWorldExtendsTestCase / HelloWorldExtendsHelloWorld。这三个文件的类声明分别如下: 

HelloWorld.java :public class HelloWorld 
HelloWorldExtendsHelloWorld.java :public class HelloWorldExtendsHelloWorld extends HelloWorld 
HelloWorldExtendsTestCase.java:public class HelloWorldExtendsTestCase extends junit.framework.TestCase 

      假设我们已经按照上面关于javac -classpath和javac 绝对路径的使用,顺利地完成了三个文件地编译。现在我们在C:\Documents and Settings\peng>目录下执行这三个.class文件 

(1).C:\Documents and Settings\peng>java  HelloWorld 
      Hello World 

可以看到执行成功。为什么我们在 C:\Documents and Settings\peng>执行命令,JVM能够找到D:\peng\java\pro\HelloWorld.class文件呢?这是因为我们配置了系统变量CLASSPATH,并且指向了目录:D:\peng\java\pro 。所以JVM会默认去该目录下加载类文件,而不需要指定.class文件的绝对路径了。 
         
(2).C:\Documents and Settings\peng>java HelloWorldExtendsHelloWorld 
       Hello World 

可以看到执行成功了。HelloWorldExtendsHelloWorld继承了HelloWorld类,所以在执行时JVM会先查找在CLASSPATH下是否存在一个HelloWorld.class文件,因为我们已经成功编译了HelloWorld 类了,所以可以成功执行HelloWorldExtendsHelloWorld.class 
  
(3).C:\Documents and Settings\peng>java HelloWorldExtendsTestCase 
     Exception in thread "main" java.lang.NoClassDefFoundError: junit/framework/TestCase 

可以看到程序抛出异常了,提示找不到junit.framework.TestCase文件。为什么同样在:\peng\java\pro 下,HelloWorldExtendsHelloWorld.class就可以成功执行,而这个就不行了呢?这是因为:            junit.framework.TestCase.class文件并不存在于当前目录下,所以为了能够让程序成功运行,我们必须通过指定CLASSPATH的方式,让JVM可以找到junit.framework.TestCase这个类,如(4): 

(4). C:\Documents and Settings\peng>java -classpath %CLASSPATH% HelloWorldExtendsTestCase 
      Hello World 

总结: 

(1).何时需要使用-classpath:当你要编译或执行的类引用了其它的类,但被引用类的.class文件不在当前目录下时,就需要通过-classpath来引入类 
(2).何时需要指定路径:当你要编译的类所在的目录和你执行javac命令的目录不是同一个目录时,就需要指定源文件的路径(CLASSPATH是用来指定.class路径的,不是用来指定.java文件的路径的) 

[转自: 
http://blog.csdn.net/pengpenglin/ 
http://www.blogjava.net/pengpenglin/ 
分享到:
评论

相关推荐

    javac--------src

    javac源码系列。。。。。。。。。。。。。。。。。。。。。。。。。。。

    plexus-compiler-javac-2.2.jar.zip

    java jar包,亲测试可用 ...把一个JAR文件添加到系统的classpath环境变量之后,java通常会把这个JAR文件当做一个路径来处理。通常使用jar命令来压缩,可以把一个或多个路径全部压缩成一个JAR文件。

    JAVAC_命令详解

    文档为中文编写,基本内容是翻译自jdk官网上的。其中个别翻译的更详尽,此文推荐大家参阅。

    Dos环境下使用javac编译与java执行多个包下的.java文件

    NULL 博文链接:https://qn-lf.iteye.com/blog/990975

    plexus-compiler-javac-1.8.1.jar.zip

    java jar包,亲测试可用 ...把一个JAR文件添加到系统的classpath环境变量之后,java通常会把这个JAR文件当做一个路径来处理。通常使用jar命令来压缩,可以把一个或多个路径全部压缩成一个JAR文件。

    exmaple_google_oauth2_java.zip

    一套完整的 google drive 认证系统,可以根据以下命令编译... javac -sourcepath src -d bin -classpath "lib/*;" @src.list copy client_secrets.json bin\ java -classpath "bin;lib/*;" com.google.oauth2.Oauth2

    dropbox_oauth2.zip

    javac -sourcepath src -d bin -classpath "lib/*;" @src.list copy app.info bin\ java -classpath "bin;lib/*;" com.dropbox.oauth2.Oauth2 此示例程序所用dropbox java api库由自己编译不是最新,如需最新...

    Portfolio-Catalog-Duplicator

    编译: javac -classpath dam-client.jar:. Base64.java Duplicate.java javac -classpath dam-client.jar:. Base64.java Duplicate.java 运行: java -classpath dam-client.jar:. Duplicate java -classpath dam...

    Throwback:基于某人的听力历史记录的播放列表生成工具

    向Last.fm抛出拉胡尔·卡纳(Rahul Khanna)的倒推如何运行和编译代码:在带有Java源文件的目录中,键入以下命令: 在Mac上: javac -classpath jsoup-1.7.2.jar * .java java -classpath。:jsoup-1.7.2.jar回滚在...

    Monopoly:Java中的垄断游戏

    sourcepath src -d classes src/monopoly/gui /*.java javac -sourcepath src -d classes src/monopoly/game/*.java javac -sourcepath src -d classes src/monopoly/properties /*.java java -classpath classes ...

    pcb-xkcd:PCommandBot 的响应程序以检索有关 xkcd 漫画的信息

    要构建,您需要下载并将其包含在类路径中: javac -classpath [PCB JAR file] XkcdResponder.java要构建 JAR 文件: javac -classpath [PCB JAR file] -d [outside dir] XkcdResponder.javacd [outside dir]jar cf ...

    p2p:操作系统3的项目1-2015年9月12日

    javac -classpath ../lib/jade.jar:. Nodo.java 运行JADE平台: java -classpath ../lib/jade.jar jade.Boot -gui -host localhost 运行文件的分发服务器: java -classpath ../lib/jade.jar:. jade.Boot -...

    Proguard4.2.zip(java编码混淆器)

    <br> javac -sourcepath src -d classes -classpath lib/ant.jar \ src/proguard/ant/ProGuardTask.java <br>If you want to compile the JME WTK obfuscator plug-in: <br> javac -sourcepath src -d...

    详解Java中-classpath和路径的使用

    本篇文章主要介绍了Java中-classpath和路径的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    testng-test-classpath-property-issue-1:一个简单的项目来演示 testng.test.classpath 属性问题

    此存储库仅用于演示testng.test.classpath属性问题。 问题 以下是中testng.test.classpath的解释。 如果设置了此属性,TestNG 将使用它来查找您的测试类而不是类... 使用testng.test.classpath属性重新运行测试: jav

    MosquittoPI_NX:心爱的PI上MosquittoHelper的简单示例类和实现

    使用正确的类路径编译Java源文件,即: javac -classpath。:classes:/ opt / pi4j / lib /'*'-d。 TestClasses.java(在目录:/ home / anon / workspace / javaDev中) 使用以下命令执行类文件: 须藤java -...

    FullCalendar-sync:使用 FullCalendar 库在 JS 中呈现您的 Google 日历

    我使用 javascript 作为指南显示页面,并使用他们的 Servlet 示例来获取日历指示: 1) go into fullcalendar-sync folder in terminal2) javac -sourcepath src -d bin -classpath "lib/*" src/...

    hadoop-findaverage

    export HADOOP_CLASSPATH=$(/usr/bin/hadoop classpath) mkdir target cd target javac -classpath ${HADOOP_CLASSPATH} ../CustomAverageTuple.java jar cf findaverage-1.0-SNAPSHOT.jar *.class cd ../ ...

    timestamp-email:从输入的电子邮件地址生成带有时间戳的自定义电子邮件地址

    时间戳电子邮件从输入的电子邮件地址生成带有时间戳的自定义电子邮件地址。...classpath path/to/directory/timestamp-email TimestampEmail.java笔记电子邮件地址会在剪贴板上停留5秒钟,因此请快速粘贴。

    Control-Alt-Hack-Online

    Alt-Hack-Online” 运行以下命令 javac -classpath bin -sourcepath src -d bin src\grp\ctrlalthack\view\MainView.java 或者,如果您在 Windows 环境中,则可以运行包含的 compile.bat 文件如何从控制台运行服务器...

Global site tag (gtag.js) - Google Analytics