1、javac(编译java源文件)
javac是用来编译.java文件的。
例子:
package com.fjassa.domain; public class Human、public class Chinese extends Human #Chinese继承Human
package com.fjassa.dao; public class UserDao(private Human human) #UserDao类持有Human成员
如何编译Human类、Chinese类?
javac -d tbin src/com/fjassa/domain/Human.java #编译Human.java到tbin目录下
javac -d tbin src/com/fjassa/domain/Chinese.java #报错,找不到Human.class,为什么?我们刚刚明明把Human编译到tbin下面了,其实呢,javac编译的时候是需要依赖jar包的,默认的classpath会自动记载${JAVA_HOME}/jar下的所有jar包。这就是我们在使用jdk内置java对象的时候,不会报错的原因,如果需要编译依赖spring包的类,那么classpath需要指定所需spring的jar包
javac -classpath tbin/ -d tbin src/com/fjassa/domain/Chinese.java #Ok
注意一点:在linux下classpath用:分割,在windows下用;分割
javac -classpath .:tbin/ -d tbin src/com/fjassa/domain/Chinese.java #linux
javac -classpath .;tbin/ -d tbin src/com/fjassa/domain/Chinese.java #linux
如何一次性编译上述这些互相依赖的类?
javac -d sbin/ src/com/fjassa/*/* # -d表示编译后存放的文件目录,上述存在依赖关系,也就是说如果要编译Chinese类必须先编译Human,要编译UserDao类必须编译Human,所以一次性编译这些类,让javac自己去判断依赖,如果单独编译一个Chinese.java,会报Human类未编译错误。
2、java(运行java对象)
运行编译后的.class字节码java对象。
java -Xmx500m -Dlog.dir=/tmp/zzz -classpath .:/tmp/java/libb com.fjsaas.demo
java jar test.jar #classpath在jar包中的META-INF/MANIFEST.MF Class-Path属性指定,-classpath指定无效,运行的java对象则由Main-Class属性指定
例子:
cd tbin/下
java -classpath . com.fjassa.dao.UserDao #运行成功