命令行编译运行java工程(转)

平时建立Java工程都是借助eclipse或intellij这些ide编辑器来构建,对于java工程的实际编译执行原理,从未了解过。作为一个曾经的C++程序员,对于源码刨根问底的那份执着从未丢过。于是今天就写了这样的一个例子进行测试。 
1.首先建立个跟目录MyJavaTest。 
2.建立第一个MyJavaTest\src\com\common\sayHellojava,代码如下:

package com.common;
public class sayHello{
    public void say(){
     System.out.println("hello boy");
    }
}

3.建立第二个java文件MyJavaTest\src\com\major\HelloWorld.java,代码如下:

package com.major;
import com.common.*;

public class HelloWorld{
    public static void main(String[] args){
        sayHello sayhello = new sayHello();
        sayhello.say();
        //System.out.println("hello boy");
    }
}

4.在MyJavaTest跟目录下执行javac -d classes src\com\common\sayHello.java命令编译sayHello.java文件生成对应的class文件,并存放在classes\src\com\common\目录,这里的-d命令,不用解释,也知道是什么意思了吧,classes是自定目的路径。 
5.接着执行javac -cp classes -d classes src\com\major\HelloWorld.java编译HelloWorld.java文件生成对应的class文件,并存放在classes\src\com\major\目录。 
然后进入classes目录下,执行Java com.major.HelloWorld。终于成功了。 
运行结果 
编译HelloWorld.java需要引入sayHello这个类,同时还要 -cp classes表明classpath依赖路径为classes目录,告诉java编辑器到该目录下寻找sayHello类。不使用该命令,则需在环境变量里面添加classpath,但是这样,不同的工程构建,就需要改动一次其值,岂不是很麻烦。最后执行的时候,如何执行java HelloWorld会报错,因为HelloWorld属于com.major包下,这是我的一时疏忽,不过从报错的顺序里,我们可以看出java编辑器载入执行类是如何查找该类的。 
至此,纠结我多日的这一困惑,终于得到解决了。

posted @ 2017-06-13 10:24  灰衣僧  阅读(592)  评论(0编辑  收藏  举报