现在有一个java类叫做TestDefault.java,代码如下:
public class TestDefault {
public static void main(String[] args) throws Exception{
System.out.println("abc");
}
}
如果让我们使用javac编译,然后再使用java命令执行的话,应该都没有问题:
但是现在有这样一个简单的类Test.java:
package app.junit;
import java.io.File;
import org.apache.commons.io.FileUtils;
public class Test {
public static void main(String[] args) throws Exception{
String cont = FileUtils.readFileToString(new File("d:\\home\\a.html"));
System.out.println(cont);
}
}
可以看到这个类和TestDefault.java的不同之处在于,Test.java引用了commons-io-2.4.jar里面的类FileUtils,那么我们javac编译和java运行编译后的class文件的时候,需要指定类路径,不然那就会报找不到类的异常。
已知Test.java的路径如下,即D:\workspace2\lzzcms\src\app\junit\Test.java:
一、javac编译
那么首先,我来编译这个引用了其他jar包的类,在java类所在目录D:\workspace2\lzzcms\src\app\junit\使用命令javac -d . -cp D:\workspace2\lzzcms\web\WEB-INF\lib\commons-io-2.4.jar ./Test.java:
命令解释:-d :用于指定放置生成的class文件的位置,这里我指定了".",表示当前目录,可以看到执行完之后在当前目录下生成了app目录,app目录下还有junit目录,junit目录下才是生成的class文件Test.class,如下图这样:
这里生成的app和junit目录是基于Test.java的package来创建的。
-cp:指定需要依赖的类的路径
./Test.java:指定了要编译的java文件的路径,可以是相对路径也可以是绝对路径
二、java命令执行生成的class文件
在java类所在目录D:\workspace2\lzzcms\src\app\junit\使用命令java -cp D:\workspace2\lzzcms\web\WEB-INF\lib\commons-io-2.4.jar;. app.junit.Test即可:
可以看到正确输出了a.html的内容(内容就是a.html)。
解释与注意:
1.这里的cp后边的类路径多了一个";.",表示寻找class文件的时候还要从当前目录下寻找
2.app.junit.Test:通过包全名指定要执行的class