上周四的时候滕云和你们分享了一期郑大晔校,主题就是“逃离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包中包含的内容。
就是这样啦,时间不早了,回家吃西瓜,喝酸奶,睡觉啦~\(≧▽≦)/~啦啦啦