上週四的時候滕雲和你們分享了一期鄭大曄校,主題就是「逃離IDE!!!」java
初始題目是這樣的:寫一個server和一個client位於不用的package下,其中server會提供一個方法打印出Hello world,而client中有main函數調用server中的方法。vim
想一下,若是是平時的作法,用IDE + Maven爲咱們建立出標準的工程目錄;結合IDE提供的各類補齊等功能輕鬆寫出;一鍵編譯、運行。各類輕鬆,,,編輯器
那麼題目的要求是:不能使用IDE函數
Step1:建立工程目錄:1)在經常使用工程目錄下建立目錄「runJavaWithoutIde」,期間用到的命令包括各類cd, cd.., ls, tree, mkdir runJavaWithoutIde;ui
2)在runJavaWithoutIde目錄下建立src文件夾,並在其中建立server和client兩個目錄。spa
Step2:編寫Server與Client java文件:1)在server目錄下,vim Server.java進入vim編輯器;press i進入編輯模式;寫以下代碼並按‘esc’ 推出編輯模式,按「shift+:」進入命令模式,並輸入wq表示write and quit.code
package server; public class Server { public void sayHello() { System.out.println("Hello World"); } }
2) 在client目錄下,經過類似過程寫出Client以下:server
package client; import server.*; public class Client { public static void main(Sting[] args) { Server server = new Server(); server.sayHello(); } }
Step3: 回到src目錄下,使用javac client/Client.java進行編譯。結果是src/client下包括Client.java, Client.class; 同時src/server下包括Server.java, Server.class.blog
爲何呢,看起來只編譯了Client.java呀,這是由於Client中import了server,所以在對client進行編譯的同時,server的編譯也完成了。it
Step4: 在src目錄下,使用java client.Client進行執行,看到Hello World出現。
結束!!!
但事情根本木有這樣順利:本來有IDE爲咱們作的事情木有,所以情況百出,package名要用小寫,import時候使用packageName.*來引入某個包內的全部內容;class須要爲public才能被package外的類使用;還有main函數的簽名(哈哈);本來的sout變成了System.out.println();
除了這些,在使用javac編譯的時候,在使用java進行運行的時候,╮(╯▽╰)╭
事情也能夠有其餘花樣,
花樣1: Step1. 刪除以前的編譯結果(rm);Step2. 在src目錄的隔壁創建output目錄,爲空;Step3. 在src目錄下運行javac -d ../output client/Client.java,觀察結果編譯出的class文件沒有出如今以前的src/client, src/server目錄下,而是出如今了output/client, output/server目錄下。也就是說-d(destination)爲咱們指定了編譯結果的存放位置。Step4. 在src目錄下運行java -cp ../output client.Client則成功打印出Hello World,這裏的-cp 用於指定classpath,默認狀況下的classpath爲當前目錄,此時因爲編譯結果存放在output目錄中,所以須要指定。
花樣2:將server達成jar包,是的client依賴於jar包
Step1. 在output目錄下,將server.class連同其外面的package一塊兒打成jar包,使用命令jar -cf server.jar server/; Step2. 刪除output/server中的編譯結果; Step3. 在src目錄下,使用java -cp ../output:../output/server.jar client.Client, 可看到成功打印出Hello World。
使用jar -tf server.jar能夠看到jar包中包含的內容。
就是這樣啦,時間不早了,回家吃西瓜,喝酸奶,睡覺啦~\(≧▽≦)/~啦啦啦