尤其是在有package、import和import *的情况下,各种混乱,IDE用久了,命令行是硬伤,有必要复习一下:
假设有 g:/src/simple/Foo.java
最好的practice是将编译后的class文件全部集中放到bin目录下,bin和src在同一目录,先把bin创建好,g:/bin
注意这里有import *
1 packagesimple;2
3 import net.mindview.util.*;4
5 public classFoo {6 public static voidmain(String[] args) {7 Print.print("Foo imports net.mindview.util.*");8 }9 }
还有g:/src/net/mindview/util/Print.java
1 packagenet.mindview.util;2 import java.io.*;3
4 public classPrint {5 //Print with a newline:
6 public static voidprint(Object obj) {7 System.out.println(obj);8 }9 //Print a newline by itself:
10 public static voidprint() {11 System.out.println();12 }13 //Print with no line break:
14 public static voidprintnb(Object obj) {15 System.out.print(obj);16 }17 //The new Java SE5 printf() (from C):
18 public staticPrintStream19 printf(String format, Object... args) {20 returnSystem.out.printf(format, args);21 }22 }
cmd切换到src目录,怎么编译运行Foo?
就不谈先前在尝试的过程中的错误了,先把正确的过程写到下面,以供举一反三:
因为Foo.java中使用了import ...*,所以要先编译Print.java,命令行如下:
javac -d ../bin net/mindview/util/Print.java /* “..” 表示上一级目录 */
然后编译Foo.java:
javac -d ../bin simple/*.java /* 虽然simple目录中只有Foo.java,但是Foo中使用了import *,所以必须使用javac ... *.java 至于原因,应该是多文件编译的要求 */
然后运行:
java -cp ../bin simple.Foo