JavaParser实践记录

需求

由于项目需要,需要添加对JAVA源码分析的支持。源码分析由团队自己开发,但如何保障开发的分析器结果的正确性,是本项目任务的最大困难。

方案构想

通过一个相对完善的JVAV分析器,生成中间输出,基于此输出信息与我们开发的分析器进行比较。两者在输出上有可能存在较大区别,如何在存在区别的文件上计算相似度,将是另一个问题,本文也就不去描述相似度计算这个问题。
目前JAVA分析库或工具有不少,有一些Python包可用,也有通用解析器可用,例如Antlr。但就Java解析来说,JavaParser是好评度最高的,相比Python的Java解析包也更加复杂一些。本文主要记录我(Java小白)的JavaParser实践使用过程。

第一条记录

时间: 2021.04.17 9:44am
地点: 家中
预期任务: 构建Java开发环境,完成基于JavaParser库的语法树解析程序。
实现构想:

  1. 安装Ubuntu虚拟机,选择Ubuntu主要是觉得这个环境下会更方便;
  2. 安装Java开发环境;
  3. 了解学习Maven的使用,搭建相关环境;
  4. 安装IDE环境;
  5. 按官方教程,构建示例;
  6. 完成语法树解析生成程序,输入为java源码文件,输出为该文件对应的语法树描述;

安装Ubuntu虚拟机

安装Ubuntu版本 20.04.

安装Java开发环境

JDK是Java开发的基础,需要搜索Ubuntu环境下JDK的安装方式。

sudo apt install default-jdk

默认JDK为11.0版本,当前maven要求版本是1.7版本,所以版本可以匹配。安装成功后,通过命令java --version进行检查。
注意:需要构建一个JAVA_HOME的环境变量,这个在JDK安装过程中并没有自动构建。我指定的目录为/usr/lib/default-java,不同系统下可能会不同。

学习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是一个基于POM概念的项目管理工具,将项目涉及的多个方面都添加到一个文件中描述。例如以前项目描述中,并没有如何来生成对应文档的信息,随着技术进步,管理变化,后来出现了生成文档的需要,如果分为多个工具来描述(不同工具的项目配置文件),对于项目管理来说是一个灾难。针对这样的场景,就可以基于Maven进行插件扩展,添加对应的项目信息描述,使用者还是只维护一个项目文件信息。
POM,我们可以简单理解就是一个XML文件。只是更加具体的规定了XML节点的名称、属性等信息。

对于Maven的学习,可以参考官方网站的介绍,包含了下载、安装、运行、配置等过程。对于最简单例子来说,只需要10分钟就可以走一遍。

安装IDE环境

Java有几个可选的IDE环境,在安装具体的IDE环境之前,我建议直接通过原始的命令行与文本编辑器进行示例学习,通过这种原始的方法,可以更好的理解Maven的使用过程,更好的理解IDE配置项的含义。
为了简单化,可以直接安装一个专门的JAVA开发IDE,例如IntelliJ IDEA,直接使用VS Code可能在代码提示方面会需要一些配置,需要额外的学习时间。

构建示例

根据Maven的教程,构建了第一个基于Maven的项目。在学习了解JavaParser项目时,发现文档中都是很简单的示例说明,对于小白来说,还需要更多细节信息。例如,例子中,没有导入包,直接使用相关的类,而对于不熟悉的人来说,这些包在哪里,如何定位,都是需要熟悉的。
后来,在JavaParser项目的github仓库中,看到有更具体的例子代码给出,参照该例子代码进行POM的编写,以及Java代码的实现。

完成语法树解析生成程序

JavaParser提供了初级的AST树生成程序,支持Yaml与XML,以及其他形式的输出,在本任务中,直接使用了XML的输出方式。后期,根据相似度对比的需要,再对输出信息进行更完整的定制。

相关代码

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

记录回顾

时间: 除去吃饭时间,总共花费5小时。
地点: 家中
任务完成情况: 实现了基本的Java语法树解析。
反思:

  1. 需要进一步对Maven的使用进行深入了解,在使用过程中,只是参照例子选择了合适的插件,有哪些插件?如何选择?都需要进一步了解;
  2. VS Code的代码提示如何设置?针对不同语言有不同的扩展,如何学习VS Code扩展的设置方法;
  3. 在不熟悉,不了解的事情上,时间还是会可能超出预期,发生不可控的问题。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容

  • 夜莺2517阅读 127,712评论 1 9
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,523评论 28 53
  • 兔子虽然是枚小硕 但学校的硕士四人寝不够 就被分到了博士楼里 两人一间 在学校的最西边 靠山 兔子的室友身体不好 ...
    待业的兔子阅读 2,586评论 2 9
  • 信任包括信任自己和信任他人 很多时候,很多事情,失败、遗憾、错过,源于不自信,不信任他人 觉得自己做不成,别人做不...
    吴氵晃阅读 6,181评论 4 8