我正在用Java动态地注入groovy脚本。因此,在执行这些脚本之前,我希望确保它们没有使用SpotBugs (静态代码分析器)的潜在错误。这是Psuedo代码:
在这里,它应该返回无限循环错误。
String script = "class Hello { static void main(String []args) { def i = 0; while ( i <= 0) { i = i - 1; } } } ";
List<Bugs> bugs = SpotBugs.getBugs(script);
if (bugs == null) {
execute(script);
}因此,如何使用java完成SpotBugs.getBugs(script),输入脚本将不会像上面的示例那样被硬编码,而是会被动态地获取。
发布于 2018-03-23 16:54:13
最简单API
最简单的方法是将编译后的代码写入类文件(如果需要的话在临时目录中)。通过将编译类作为文件,您将能够使用提供API的FindBugs类来配置作用域和规则,而无需处理可能发生更改的内部类。
Groovy动态(默认)与静态编译
但是,您将面临的主要障碍是groovy 字节码对于SpotBugs来说过于模糊。对于函数abc()的调用,您将不会在字节码中看到对方法abc的调用。它将是对在运行时创建的全局函数映射的引用。Groovy有一种模式可以编译成一种不那么动态的格式。此模式不允许在运行时创建函数。您可以检查配置,以指示编译器在此测试repo:https://github.com/find-sec-bugs/find-sec-bugs-demos/tree/master/groovy-simple中的静态模式。但是,这是一个Gradle编译,而不是接收字符串作为代码的编程API。
发布于 2018-03-21 10:30:06
似乎SpotBugs应该使用maven运行,这意味着它将打包并只包含有效的groovy脚本。因此,您不需要在执行之前进行检查。
https://stackoverflow.com/questions/49403618
复制相似问题