自动化解析代码分析的依赖性

时间:2017-07-08 20:38:01

标签: java maven code-analysis static-analysis inria-spoon

我的scala代码库带有Spoon代码:

class ExtractCodeDataTest extends FlatSpec {


  it should "Run and not be empty" in{

    val l = new Launcher()
    l.addInputResource("./testData/owasp-security-logging")

    l.buildModel()

    val factory = l.getFactory
    val allClass = factory.Class().getAll(true)

    println(allClass)
  }

}

我从github克隆了开源项目,但我无法编译它。

The import org.junit cannot be resolved at /home/user/IdeaProjects/testSearch/testData/owasp-security-logging/owasp-security-logging-logback/src/test/java/org/owasp/security/logging/filter/SecurityMarkerFilterTest.java:3
spoon.compiler.ModelBuildingException: The import org.junit cannot be resolved at /home/user/IdeaProjects/testSearch/testData/owasp-security-logging/owasp-security-logging-logback/src/test/java/org/owasp/security/logging/filter/SecurityMarkerFilterTest.java:3
    at spoon.support.compiler.jdt.JDTBasedSpoonCompiler.report(JDTBasedSpoonCompiler.java:583)
    at spoon.support.compiler.jdt.JDTBasedSpoonCompiler.reportProblems(JDTBasedSpoonCompiler.java:564)
    at spoon.support.compiler.jdt.JDTBasedSpoonCompiler.build(JDTBasedSpoonCompiler.java:120)
    at spoon.support.compiler.jdt.JDTBasedSpoonCompiler.build(JDTBasedSpoonCompiler.java:101)

我无法找到自动解决依赖的方法吗?如何解决一般项目 - 不仅仅是这个项目?

1 个答案:

答案 0 :(得分:1)

Spoon可以两种不同的模式使用:

  1. with full classpath
  2. in“no-classpath mode”
  3. 使用第一种模式,您必须向Spoon提供分析项目所需的整个类路径,例如在命令行中使用参数--source-classpath或使用launcher.getEnvironment().setSourceClasspath(String[])。在这种模式下,您将拥有最多的信息来分析您的代码。

    使用第二种模式,Spoon将只分析给定的源代码而不利用库中的信息。您将无法从外部库获取类的所有信息,也无法编译代码,但您仍然可以分析项目的代码源。您可以通过设置launcher.getEnvironement().setNoClasspath(true)来使用此模式。

    请注意,在Spoon上打开一个问题,以便能够自动分析Maven项目,在考虑pom.xml中给出的整个依赖关系时,请参阅:https://github.com/INRIA/spoon/issues/1396