CodeRunner 的 Java 擴(kuò)展 Jar 包支持

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芋肠。

img_01.png

這樣我們就復(fù)制了一份 Java 語言支持,在此基礎(chǔ)上我們修改使其支持多個(gè)源文件和包含 jar 包遵蚜。點(diǎn)擊右側(cè)的 Edit Script... 按鈕帖池,此時(shí)會(huì)在 CodeRunner 的編輯器內(nèi)打開編譯腳本 compile.sh ,這個(gè)腳本定義了如何編譯 java 文件吭净。我們只需要修改該腳本文件使其按我們期望的方式編譯源文件并正確運(yùn)行即可睡汹,我們的期望是--編譯文件所在目錄下面所有的源文件,并鏈接該目錄下所有的 jar 包寂殉。

  1. 首先囚巴,我們需要指示編譯腳本編譯所有 java 文件。
    最簡單的處理方法是使用通配符 *.java友扰,我們只需找到下列行:

    CR_FILENAME="$packageDirectory"/"$CR_FILENAME"
    

    替換為:

    CR_FILENAME="$packageDirectory"/*.java
    

    這樣彤叉,編譯時(shí)就會(huì)將源文件所在目錄下的所有 java 文件都編譯了。

  2. 接下來我們需要鏈接目錄下面所有的 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}"
    
  3. 同樣斑举,在編譯完成后執(zhí)行時(shí),也需要引用 CLASSPATH病涨。
    因此懂昂,我們找到下面這行:

    echo "cd \"$PWD\"; java $out"
    

    添加 -classpath 參數(shù):

    echo "cd \"$PWD\"; java -classpath $CLASSPATH $out"
    
  4. 保存并關(guān)閉腳本編輯,完成没宾。

此時(shí)凌彬,我們就已經(jīng)建立一個(gè)新的語言支持 Java Ext,它能夠編譯同一文件夾內(nèi)的多個(gè)源文件并自動(dòng)鏈接該文件夾下的 jar 文件循衰。

測(cè)試

我們以 fastjson 為例測(cè)試 Java Ext 的支持铲敛。

  1. 新建一個(gè)文件夾 TestFastjson ,將下載的 fastjson 包復(fù)制到文件夾內(nèi)会钝。

  2. 打開 CodeRunner 新建一個(gè)文件伐蒋,選擇語言 Java Ext,將生成模版的類名改為 FTClass迁酸,command+s 將文件命名為 FTClass.java 保存到剛剛新建的目錄下先鱼。

  3. 新建另一個(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 的包。

  4. 回到 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 保存宏多。

  5. 現(xiàn)在我們的測(cè)試文件夾應(yīng)該有三個(gè)文件:


    img_02.png

    點(diǎn)擊運(yùn)行,命令行能夠正確的輸出:


    img_03.png

    說明 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)生亂碼了隔显。


img_04.png

后記

CodeRunner 僅僅是一個(gè)非常方便的代碼測(cè)試和學(xué)習(xí)的工具却妨,它并不是一個(gè)完整的 IDE,在功能上還不是十分的完整荣月,例如不支持 package管呵,但僅僅作為一個(gè)代碼測(cè)試工具真的是非常易用和方便了,而且哺窄,價(jià)格也不貴捐下。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市萌业,隨后出現(xiàn)的幾起案子坷襟,更是在濱河造成了極大的恐慌,老刑警劉巖生年,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件婴程,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡抱婉,警方通過查閱死者的電腦和手機(jī)档叔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門桌粉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人衙四,你說我怎么就攤上這事铃肯。” “怎么了传蹈?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵押逼,是天一觀的道長。 經(jīng)常有香客問我惦界,道長挑格,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任沾歪,我火速辦了婚禮漂彤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瞬逊。我一直安慰自己显歧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布确镊。 她就那樣靜靜地躺著士骤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蕾域。 梳的紋絲不亂的頭發(fā)上拷肌,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音旨巷,去河邊找鬼巨缘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛采呐,可吹牛的內(nèi)容都是我干的若锁。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼斧吐,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼又固!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起煤率,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤仰冠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蝶糯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體洋只,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了识虚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肢扯。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖舷礼,靈堂內(nèi)的尸體忽然破棺而出鹃彻,到底是詐尸還是另有隱情,我是刑警寧澤妻献,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站团赁,受9級(jí)特大地震影響育拨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜欢摄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一熬丧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧怀挠,春花似錦析蝴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吞滞,卻和暖如春佑菩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背裁赠。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國打工殿漠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人佩捞。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓绞幌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親一忱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子莲蜘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容