如何通过程序检测任何源代码库/目录中使用的框架和/或库



假设我有一个源代码目录,我想运行一个脚本,扫描目录中的代码并返回其中使用的语言、框架和库。

我甚至尝试了它依赖的工具来获取依赖项,但是,它变得一团糟。

有人能帮我弄清楚如何用现有的工具做这些事情吗?或者如果必须制作这样的工具,我应该如何处理它。

提前感谢

在一般情况下,这是不可能的。停顿问题使任何程序都无法在有限的时间内计算其他程序可能做什么或不做什么,包括运行所需的依赖关系。当然,您可以使其适用于某些输入,但决不能适用于所有输入。

所以你必须妥协:

  • 您需要支持哪些语言?例如,it-depends并不试图支持Java。不同的语言有不同的方式从它们的源代码调用依赖项。例如,如果使用C,则需要查看#includes
  • 您需要支持哪些构建链?为C解析标准Makefile与为Java查看Mavenpom.xml非常不同。此外,构建链可以执行任意计算——同样,由于停止问题,您的依赖性检测程序将无法"执行";静态地";弄清楚预期的行为。根据检测到的存在,完全有可能链接到一个库或另一个库(或者根本没有(。在这种情况下,您应该输出什么?。对于没有文档化构建过程的程序,您根本无法知道它们的依赖性。通常,构建过程是人工记录的,但不是机器可读的
  • 您认为库/框架是什么?长期使用的库可以在许多不同的版本中发展,并且一个版本是必需的而不是另一个版本这一事实在源代码中可能并不明确。如果一个代码库只依赖于在一个特定的、现已被取代的库版本中发现的行为,并且没有明确提及该版本,那么您的依赖项检测程序将无法了解它(除非您在库版本特定的检测中进行编码;这是可行的,但要根据具体情况进行,并且需要深入了解版本之间的差异(

因此,你的问题的答案是。。。这取决于(他们对限制进行了相当多的详细说明(。对于it-depends未涵盖的Java+Maven的特定情况,您可以通过mvn dependency:tree使用Maven本身选择问题的一个子集,而不是试图一次解决所有问题

最新更新