JavaParser實(shí)踐記錄

需求

由于項(xiàng)目需要,需要添加對JAVA源碼分析的支持。源碼分析由團(tuán)隊(duì)自己開發(fā)衡楞,但如何保障開發(fā)的分析器結(jié)果的正確性,是本項(xiàng)目任務(wù)的最大困難敦姻。

方案構(gòu)想

通過一個(gè)相對完善的JVAV分析器寺酪,生成中間輸出,基于此輸出信息與我們開發(fā)的分析器進(jìn)行比較替劈。兩者在輸出上有可能存在較大區(qū)別,如何在存在區(qū)別的文件上計(jì)算相似度得滤,將是另一個(gè)問題陨献,本文也就不去描述相似度計(jì)算這個(gè)問題。
目前JAVA分析庫或工具有不少懂更,有一些Python包可用眨业,也有通用解析器可用急膀,例如Antlr。但就Java解析來說龄捡,JavaParser是好評度最高的卓嫂,相比Python的Java解析包也更加復(fù)雜一些。本文主要記錄我(Java小白)的JavaParser實(shí)踐使用過程聘殖。

第一條記錄

時(shí)間: 2021.04.17 9:44am
地點(diǎn): 家中
預(yù)期任務(wù): 構(gòu)建Java開發(fā)環(huán)境晨雳,完成基于JavaParser庫的語法樹解析程序。
實(shí)現(xiàn)構(gòu)想:

  1. 安裝Ubuntu虛擬機(jī)奸腺,選擇Ubuntu主要是覺得這個(gè)環(huán)境下會更方便餐禁;
  2. 安裝Java開發(fā)環(huán)境;
  3. 了解學(xué)習(xí)Maven的使用突照,搭建相關(guān)環(huán)境帮非;
  4. 安裝IDE環(huán)境;
  5. 按官方教程讹蘑,構(gòu)建示例末盔;
  6. 完成語法樹解析生成程序,輸入為java源碼文件座慰,輸出為該文件對應(yīng)的語法樹描述陨舱;

安裝Ubuntu虛擬機(jī)

安裝Ubuntu版本 20.04.

安裝Java開發(fā)環(huán)境

JDK是Java開發(fā)的基礎(chǔ),需要搜索Ubuntu環(huán)境下JDK的安裝方式角骤。

sudo apt install default-jdk

默認(rèn)JDK為11.0版本隅忿,當(dāng)前maven要求版本是1.7版本,所以版本可以匹配邦尊。安裝成功后背桐,通過命令java --version進(jìn)行檢查。
注意:需要構(gòu)建一個(gè)JAVA_HOME的環(huán)境變量蝉揍,這個(gè)在JDK安裝過程中并沒有自動(dòng)構(gòu)建链峭。我指定的目錄為/usr/lib/default-java,不同系統(tǒng)下可能會不同又沾。

學(xué)習(xí)Maven

Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.

簡單來說弊仪,Maven是一個(gè)基于POM概念的項(xiàng)目管理工具,將項(xiàng)目涉及的多個(gè)方面都添加到一個(gè)文件中描述杖刷。例如以前項(xiàng)目描述中励饵,并沒有如何來生成對應(yīng)文檔的信息,隨著技術(shù)進(jìn)步滑燃,管理變化役听,后來出現(xiàn)了生成文檔的需要,如果分為多個(gè)工具來描述(不同工具的項(xiàng)目配置文件),對于項(xiàng)目管理來說是一個(gè)災(zāi)難典予。針對這樣的場景甜滨,就可以基于Maven進(jìn)行插件擴(kuò)展,添加對應(yīng)的項(xiàng)目信息描述瘤袖,使用者還是只維護(hù)一個(gè)項(xiàng)目文件信息衣摩。
POM,我們可以簡單理解就是一個(gè)XML文件捂敌。只是更加具體的規(guī)定了XML節(jié)點(diǎn)的名稱艾扮、屬性等信息。

對于Maven的學(xué)習(xí)黍匾,可以參考官方網(wǎng)站的介紹栏渺,包含了下載、安裝锐涯、運(yùn)行磕诊、配置等過程。對于最簡單例子來說纹腌,只需要10分鐘就可以走一遍霎终。

安裝IDE環(huán)境

Java有幾個(gè)可選的IDE環(huán)境,在安裝具體的IDE環(huán)境之前升薯,我建議直接通過原始的命令行與文本編輯器進(jìn)行示例學(xué)習(xí)莱褒,通過這種原始的方法,可以更好的理解Maven的使用過程涎劈,更好的理解IDE配置項(xiàng)的含義广凸。
為了簡單化,可以直接安裝一個(gè)專門的JAVA開發(fā)IDE蛛枚,例如IntelliJ IDEA谅海,直接使用VS Code可能在代碼提示方面會需要一些配置,需要額外的學(xué)習(xí)時(shí)間蹦浦。

構(gòu)建示例

根據(jù)Maven的教程扭吁,構(gòu)建了第一個(gè)基于Maven的項(xiàng)目。在學(xué)習(xí)了解JavaParser項(xiàng)目時(shí)盲镶,發(fā)現(xiàn)文檔中都是很簡單的示例說明侥袜,對于小白來說,還需要更多細(xì)節(jié)信息溉贿。例如枫吧,例子中,沒有導(dǎo)入包宇色,直接使用相關(guān)的類由蘑,而對于不熟悉的人來說闽寡,這些包在哪里,如何定位尼酿,都是需要熟悉的。
后來植影,在JavaParser項(xiàng)目的github倉庫中裳擎,看到有更具體的例子代碼給出,參照該例子代碼進(jìn)行POM的編寫思币,以及Java代碼的實(shí)現(xiàn)鹿响。

完成語法樹解析生成程序

JavaParser提供了初級的AST樹生成程序,支持Yaml與XML谷饿,以及其他形式的輸出惶我,在本任務(wù)中,直接使用了XML的輸出方式博投。后期绸贡,根據(jù)相似度對比的需要,再對輸出信息進(jìn)行更完整的定制毅哗。

相關(guān)代碼

https://gitee.com/imlaji/java-ast

記錄回顧

時(shí)間: 除去吃飯時(shí)間听怕,總共花費(fèi)5小時(shí)。
地點(diǎn): 家中
任務(wù)完成情況: 實(shí)現(xiàn)了基本的Java語法樹解析虑绵。
反思:

  1. 需要進(jìn)一步對Maven的使用進(jìn)行深入了解尿瞭,在使用過程中,只是參照例子選擇了合適的插件翅睛,有哪些插件声搁?如何選擇?都需要進(jìn)一步了解捕发;
  2. VS Code的代碼提示如何設(shè)置疏旨?針對不同語言有不同的擴(kuò)展,如何學(xué)習(xí)VS Code擴(kuò)展的設(shè)置方法爬骤;
  3. 在不熟悉充石,不了解的事情上,時(shí)間還是會可能超出預(yù)期霞玄,發(fā)生不可控的問題骤铃。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市坷剧,隨后出現(xiàn)的幾起案子惰爬,更是在濱河造成了極大的恐慌,老刑警劉巖惫企,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撕瞧,死亡現(xiàn)場離奇詭異陵叽,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)丛版,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門巩掺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人页畦,你說我怎么就攤上這事胖替。” “怎么了豫缨?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵独令,是天一觀的道長。 經(jīng)常有香客問我好芭,道長燃箭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任舍败,我火速辦了婚禮招狸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瓤湘。我一直安慰自己瓢颅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布弛说。 她就那樣靜靜地躺著挽懦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪木人。 梳的紋絲不亂的頭發(fā)上信柿,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機(jī)與錄音醒第,去河邊找鬼渔嚷。 笑死,一個(gè)胖子當(dāng)著我的面吹牛稠曼,可吹牛的內(nèi)容都是我干的形病。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼霞幅,長吁一口氣:“原來是場噩夢啊……” “哼漠吻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起司恳,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤途乃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后扔傅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耍共,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡烫饼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了试读。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杠纵。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖钩骇,靈堂內(nèi)的尸體忽然破棺而出淡诗,到底是詐尸還是另有隱情,我是刑警寧澤伊履,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站款违,受9級特大地震影響唐瀑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜插爹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一哄辣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赠尾,春花似錦力穗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至寸宵,卻和暖如春崖面,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背梯影。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工巫员, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人甲棍。 一個(gè)月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓简识,卻偏偏與公主長得像,于是被迫代替她去往敵國和親感猛。 傳聞我的和親對象是個(gè)殘疾皇子七扰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351

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

  • 夜鶯2517閱讀 127,717評論 1 9
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭唱遭,有人歡樂有人憂愁戳寸,有人驚喜有人失落,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,531評論 28 53
  • 兔子雖然是枚小碩 但學(xué)校的碩士四人寢不夠 就被分到了博士樓里 兩人一間 在學(xué)校的最西邊 靠山 兔子的室友身體不好 ...
    待業(yè)的兔子閱讀 2,594評論 2 9
  • 信任包括信任自己和信任他人 很多時(shí)候拷泽,很多事情疫鹊,失敗袖瞻、遺憾、錯(cuò)過拆吆,源于不自信聋迎,不信任他人 覺得自己做不成,別人做不...
    吳氵晃閱讀 6,187評論 4 8