进入CentOS系统,在一个java的目录下,有两个目录,src与classes,分别为源代码与编译之后的类文件存放的目录。
上面在src目录下,有eu/vandertil/jerasure与eu/vandertil/jerasure/jni/两个包。而eu/vandertil/jerasure/jni/包里6个类,其中Main.java要依赖Galois.java类,其他5个类相互独立,无依赖关系。
现在当前路径为src和classes的上一层目录,对源码进行编译:
javac -d classes
src/eu/vandertil/jerasure/jni/Cauchy.java
src/eu/vandertil/jerasure/jni/Galois.java
src/eu/vandertil/jerasure/jni/Jerasure.java
src/eu/vandertil/jerasure/jni/Liberation.java
src/eu/vandertil/jerasure/jni/ReedSolomon.java
一次可以指定多个类,在Linux系统中,各个类之间要用空格隔开。上次-d参数表示,编译的目标路径。
现在要进行编译Main.java类,由于Main.java依赖Galois.java类,所以我们要指定依赖路径:
javac -d classes -cp classes src/eu/vandertil/jerasure/jni/Main.java
上面-cp是-classpath的简写,指明此次编译需要用到的依赖类的路径。下面查看classes的目录结构:
可以看到,上面也一次是按包组织的树形文件目录。
现在要运行Main类。
进入到classes目录:
可以看到,指定具体的类时,使用路径方式和使用包方式均能正确运行程序。
但进入eu后,相应的运行则会报错。
由此可知,java运行时,必须指定报名,为了翻遍找到类,运行命令的当前目录最好为首层包的上一层目录。
但编译时使用javac好像没有严格的限制,只要更具当前路径进一步找到要编译的类则可。