javac和java命令行中的-classpath选项 - Go语言中文社区

javac和java命令行中的-classpath选项


javacjava命令行中的-classpath选项

这是个很基础的问题,但是因为基本上都是用现有的IDE工具 来开发java程序,所以很少有人意识到这一点

先来看几个小例子:

一、测试java命令中的-classpath参数

1.  编写Hello.java

package com.cn.andy;

/**
 
* Created by zhaojh on 2018/3/19.
 */
public class Hello {
   
public static void main(String[]args) {
       
System.out.println("helloworld!");
   
}
}

2.将Hello.java文件拷贝到某个目录中,假设目录为:d:/test1/src/com/cn/andy

3. windows环境进入到cmd,进入到d:/test1/src/com/cn/andy,

执行javac -d d:/test1/target Hello.java

此时target目录中将生成com/cn/andy/Hello.class

 

此处需要了解下面的命令:

javac-d destdir srcFile

其中:1、-d destdir是用来指定存放编译生成的.class文件的路径。(若此选项省略,那么默认在当前目录下生成.class文件,并且没有生成包文件夹;当前目录可以用“.”来表示,即:javac -d . srcFile )

注意:添加-d选项除了可以指定编译生成的.class文件的路径外,最大的区别是可以将源文件首行的package关键字下的包名在当前路径下生成文件夹。

4.进入d:/test1/target

执行java com.cn.andy.Hello

此时应该会正常输出hello world!

思考:

1、 为什么java命令会找到当前目录下的com/cn/andy/Hello.class文件?

因为当前环境变量的classpath属性设置为

.;%JAVA_HOME%lib;%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jar

如果把.;去掉则无法执行,此时如果执行java -classpath . com.cn.andy.Hello

则还可以正常执行

2、 同样,如果将d:/test1/target目录设置进classpath环境变量中,则在任意的目录中执行javacom.cn.andy.Hello都可以正常执行

 

二、测试javac编译命令中的-classpath参数

1.编写User.java

package com.cn.andy.model;


public class User {
    private Integer id;
    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

3、 编写Hello2.java

package com.cn.andy;

import com.cn.andy.model.User;

/**
 * Created by zhaojh on 2018/3/19.
 */
public class Hello2 {
    public static void main(String[] args) {
        User user = new User();
        user.setId(1);
        user.setName("andy1");
        System.out.println(user);
    }
}

4、 将classpath环境变量完全清除

5、 进入到d:/test1/src/com/cn/andy目录,执行javac -d d:/test1/targetHello2.java

6、 执行javac -classpath d:/test1/src -d d:/test1/target Hello2.java编译成功


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



 

 


版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/andyzhaojianhui/article/details/79624836
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 22:15:06
  • 阅读 ( 1015 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢