Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 扫描代码库以使用不推荐的方法_Java_Eclipse_Deprecated_Eclipse Jdt - Fatal编程技术网

Java 扫描代码库以使用不推荐的方法

Java 扫描代码库以使用不推荐的方法,java,eclipse,deprecated,eclipse-jdt,Java,Eclipse,Deprecated,Eclipse Jdt,我的任务是开发一个工具,扫描大量Java项目(~7000.Java文件),以使用不推荐的方法/属性/API。已经指定该工具一次扫描一个文件,执行一些分析,并输出一个有问题的文件列表,以及不推荐的代码段出现的行号。我一直在使用EclipseJDTJava解析器来实现这一点,但是我似乎无法理解这一点 因为每个文件一次扫描一个文件,编译器不知道哪些方法被弃用,哪些不被弃用,所以我不能只调用一些isDeprecated()方法并将其保留 我编译了一个列表,列出了代码中要查找的所有不推荐的方法,并针对代码

我的任务是开发一个工具,扫描大量Java项目(~7000
.Java
文件),以使用不推荐的方法/属性/API。已经指定该工具一次扫描一个文件,执行一些分析,并输出一个有问题的文件列表,以及不推荐的代码段出现的行号。我一直在使用EclipseJDTJava解析器来实现这一点,但是我似乎无法理解这一点

因为每个文件一次扫描一个文件,编译器不知道哪些方法被弃用,哪些不被弃用,所以我不能只调用一些
isDeprecated()
方法并将其保留

我编译了一个列表,列出了代码中要查找的所有不推荐的方法,并针对代码库中的每个方法调用进行了检查(有很多),但这是一个丑陋的解决方案,产生了大量不可接受的误报,由于解析器的局限性或我对解析器的知识的局限性


我是否能够构建每个单独的项目,并将编译器警告输出到一些
.txt
文件或其他文件?这是我第一次处理这种规模的项目,所以我真的不确定这样的东西是如何运作的。这并不完全符合规范,我想这会相当耗时,但如果这就是它所需要的,那么这就是它所需要的。

Eclipse已经为您完成了这项工作。您只需要启用
Java开发用户指南>参考>首选项>Java>编译器>弃用API


如果您不知道,Eclipse编译器也可以在Eclipse IDE之外使用,可以在中找到说明。

有趣的问题!您说过您编译了一个列表,列出了代码中要查找的所有不推荐的方法,并根据代码库中的每个方法调用检查了该列表


如果您使用JDT,我认为这是一种很好的方法。可以改进的是,在解析目标库/包时,获取不推荐的方法及其相应的类和包。例如,如果您解析SDK,您将得到所有不推荐使用的方法及其相应的类和包。使用这些限定的方法名,您可以通过匹配方法、类和包的名称来搜索大量Java项目。这将大大减少误报

非常有趣的是,你试图解决的问题正是我在工作中遇到的问题(再加上更多与此相关的问题)。。。 我想我有一个很好的解决方案给你,这对我很有用

步骤1:使用类似于的爬虫程序构建文件,该爬虫程序的目的是创建一个文件,例如csv文件(在工作场所非常常见),其中包含api中不推荐的所有功能(方法、字段、接口、类、构造函数等)。建立这个文件不是为乞丐,但所有因此,如果你有一些经验,它可以通过3-4小时的工作完成

步骤2:在您拥有步骤1中的文件后,对于每个java文件,您需要检查扫描,您需要做的是将其与步骤1中的文件进行比较,如果步骤1中的数据集已更新且编程良好,则您不会错过任何东西

第3步:输出列表-我将把它留给您作为练习。玩得开心

直觉:使用Java或您喜欢的任何语言,使用简单的html解析器(如jsoup或json)编写数据集,然后编写一个bash脚本,比较数据集和需要扫描的.Java文件。在脚本中-对于使用不推荐的api的每个.java,创建一个.txt文件,其中包含有关此使用的所需信息。
祝你好运

你可以使用一个已经做到这一点的工具:单通道限制背后的原理是什么?似乎不合理。编译所有东西和处理编译器输出会比处理源文件更容易吗?不要重新发明轮子。。。有一些静态分析工具,比如上面提到的Sonar,已经做到了这一点。单次通过限制的原因是因为我应该让它与公司的平台一起工作,一次扫描一个文件,但我想在这一点上不会发生。我来看看声纳,谢谢大家。