一、javac(編譯java源文件)java
javac是用來編譯.java文件的。linux
例子:spring
package com.fjassa.domain; public class Human、public class Chinese extends Human #Chinese繼承Humanwindows
package com.fjassa.dao; public class UserDao(private Human human) #UserDao類持有Human成員dom
如何編譯Human類、Chinese類?spa
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下用;分割class
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類未編譯錯誤。
二、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 #運行成功