CodeRunner 介紹
CodeRunner 是 Mac 上一款功能強(qiáng)大但使用簡單代碼工具炭庙,官方介紹支持幾乎所有語言(20種語言),同時(shí)支持語法高亮煌寇、代碼提示和多種界面主題焕蹄,在學(xué)習(xí)新的語言或編寫簡單測(cè)試代碼時(shí)非常實(shí)用。
我常常用它來管理一些代碼片段和測(cè)試不確定的語言特性以及測(cè)試第三方開發(fā)包的接口行為阀溶。但 CodeRunner 并不是一個(gè)完整的 IDE腻脏,僅僅只能編譯和運(yùn)行單個(gè)文件鸦泳,很多時(shí)候我們可能需要用編寫并編譯多個(gè)源文件或包含第三方庫,這時(shí)候 CodeRunner 就完成不了了永品。所幸做鹰,CodeRunner 支持語言擴(kuò)充,下面我們以 Java 為例鼎姐,介紹支持多個(gè) java 文件并導(dǎo)入第三方 jar 包钾麸。
擴(kuò)充Java支持
首先,打開 CodeRunner 點(diǎn)擊菜單 Preferences -> Languages 症见,從左側(cè)列表中找到 Java喂走,點(diǎn)擊下面的齒輪按鈕,選擇 Duplicate 谋作,將其命名為Java Ext芋肠。
這樣我們就復(fù)制了一份 Java 語言支持,在此基礎(chǔ)上我們修改使其支持多個(gè)源文件和包含 jar 包遵蚜。點(diǎn)擊右側(cè)的 Edit Script... 按鈕帖池,此時(shí)會(huì)在 CodeRunner 的編輯器內(nèi)打開編譯腳本 compile.sh ,這個(gè)腳本定義了如何編譯 java 文件吭净。我們只需要修改該腳本文件使其按我們期望的方式編譯源文件并正確運(yùn)行即可睡汹,我們的期望是--編譯文件所在目錄下面所有的源文件,并鏈接該目錄下所有的 jar 包寂殉。
-
首先囚巴,我們需要指示編譯腳本編譯所有 java 文件。
最簡單的處理方法是使用通配符*.java
友扰,我們只需找到下列行:CR_FILENAME="$packageDirectory"/"$CR_FILENAME"
替換為:
CR_FILENAME="$packageDirectory"/*.java
這樣彤叉,編譯時(shí)就會(huì)將源文件所在目錄下的所有 java 文件都編譯了。
-
接下來我們需要鏈接目錄下面所有的 jar 文件村怪。
我們只需要搜索當(dāng)前目錄下所有的jar 文件秽浇,并把他加到 classpath 中(在 java 執(zhí)行時(shí),如需要引用 jar 包甚负,同時(shí)必須將.
加入到 classpath 中)柬焕,下面的腳本可以完成這件事:find . "(" -name "." -or -name "*.jar" ")" | sed '$!N;s/\n/:/g'
我們把他添加到腳本中,找到下面這行:
javac "$CR_FILENAME" -encoding ${enc[$CR_ENCODING]} "${@:1}"
在之前添加 CLASSPATH 變量梭域,并添加編譯參數(shù):
CLASSPATH=`find . "(" -name "." -or -name "*.jar" ")" | sed '$!N;s/\n/:/g'` javac "$CR_FILENAME" -encoding ${enc[$CR_ENCODING]} -classpath "$CLASSPATH" "${@:1}"
-
同樣斑举,在編譯完成后執(zhí)行時(shí),也需要引用 CLASSPATH病涨。
因此懂昂,我們找到下面這行:echo "cd \"$PWD\"; java $out"
添加
-classpath
參數(shù):echo "cd \"$PWD\"; java -classpath $CLASSPATH $out"
保存并關(guān)閉腳本編輯,完成没宾。
此時(shí)凌彬,我們就已經(jīng)建立一個(gè)新的語言支持 Java Ext,它能夠編譯同一文件夾內(nèi)的多個(gè)源文件并自動(dòng)鏈接該文件夾下的 jar 文件循衰。
測(cè)試
我們以 fastjson 為例測(cè)試 Java Ext 的支持铲敛。
新建一個(gè)文件夾
TestFastjson
,將下載的 fastjson 包復(fù)制到文件夾內(nèi)会钝。打開 CodeRunner 新建一個(gè)文件伐蒋,選擇語言
Java Ext
,將生成模版的類名改為FTClass
迁酸,command+s
將文件命名為FTClass.java
保存到剛剛新建的目錄下先鱼。-
新建另一個(gè)文件,改為
User
類奸鬓,內(nèi)容如下:import com.alibaba.fastjson.annotation.JSONField; class User { @JSONField(name = "USER_ID") private String userId; @JSONField(name = "USER_NAME") private String userName; public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } }
同樣保存到新建的目錄下焙畔,這里我們已經(jīng) import 了 fastjson 的包。
-
回到
FTClass.java
文件串远,我們添加一些簡單的測(cè)試代碼:import com.alibaba.fastjson.*; import java.util.*; class FTClass { public static void main(String[] args) { User user = new User(); user.setUserId("admin"); user.setUserName("Creaman Xu"); System.out.print(JSON.toJSONString(user)); } }
command+s
保存宏多。 -
現(xiàn)在我們的測(cè)試文件夾應(yīng)該有三個(gè)文件:
點(diǎn)擊運(yùn)行,命令行能夠正確的輸出:
說明 Java Ext 可以正常工作了澡罚。
I/O Encoding
如果產(chǎn)生錯(cuò)誤伸但,有時(shí)候命令行會(huì)打印亂碼,那是因?yàn)?java 默認(rèn)輸出是 UTF8 編碼留搔,但 CodeRunner 使用的默認(rèn)編碼格式不是 UTF8更胖,我們可以在設(shè)置中將其改為 UTF8,這樣就不會(huì)產(chǎn)生亂碼了隔显。
后記
CodeRunner 僅僅是一個(gè)非常方便的代碼測(cè)試和學(xué)習(xí)的工具却妨,它并不是一個(gè)完整的 IDE,在功能上還不是十分的完整荣月,例如不支持 package管呵,但僅僅作為一個(gè)代碼測(cè)試工具真的是非常易用和方便了,而且哺窄,價(jià)格也不貴捐下。