java 项目 检测_如果项目使用Java8,我如何通过静态分析检测?

我可以在这里看到多种方法,包括源代码和基于二进制代码,寻找Java 8 API并寻找Java 8语言特性.

寻找Java 8 API

在源代码中寻找常见的Java 8 API(简单)

您可以解析代码并查找最初出现在Java 8中的API – 正如您在答案中所建议的那样. Java 8 API最常见的功能是streams和Optional类,以及java.util.function包.我希望几乎所有迁移到Java 8的项目都能使用这些功能.

在源代码中查找所有Java 8 API(高级)

要获得100%的答案,如果某个特定项目是否使用Java 8 API,您需要查找的不是某些项目,而是查找Java 8中添加的所有API.可能有很多方法可以找到该列表,但是有一个名为Sigtest的工具专门用于比较产品的不同版本的API(在这种情况下,产品是Java本身).

在二进制文件中也一样

可能更便宜的方法是使用二进制文件而不是源文件.所有外部链接都放在.class文件的开头,在一个名为常量池的部分中.有些工具可以帮助您提取此数据,例如ClassDep(它作为Apache River的一部分分发,但您可以单独使用它).

检查语言版本

检查二进制文件中的类文件版本

对于每种语言版本,都会在类文件中记录不同的版本.对于Java 7,它是51.0,对于Java 8 – 52.0,对于Java 9 – 53.0.当使用-v选项启动时,JDK附带的javap工具会打印此版本.

寻找Java 8语言功能

由于您正在使用源代码,我假设您的解析器支持Java 8.如果是这样,它将能够识别Java 8语言结构,如lambda和方法引用. Java 8语言功能的完整(好吧,我认为它是完整的)列表是here.

关于结果的准确性

每种方法的准确性取决于问题所在.如果是“项目是否使用Java 8?”那么没有一种方法会给出100%的结果.正如Holger在他的评论中指出的那样,可能存在部分迁移的项目,这些项目仅针对Java 8进行编译,并且不使用任何API,或者仅使用Java 8 API但是针对Java 7编译.

问题“项目是否使用语言级别为8的编译?”最好通过类文件版本分析来回答 – 任何使用lambdas的类都将具有版本52.0,但反之亦然.

问题“项目是否使用Java 8 API?”,显然需要分析引用.我只能推测对所选API的分析是否足够 – 像您正在进行的研究可以给出答案.

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值