1

想详细了解一下jqassistant的扫描过程。例如,它会扫描所有 Jar 文件和所有类,还是只扫描我直接从我的类中引用的那个。要回答此类问题,调试通常是一个不错的选择。您通常如何将 jqassistant 作为 maven 插件启动。调试 maven 插件并不是那么容易。所以我认为最好检查命令行客户端。调试工作正常,但不幸的是我得到了完全不同的结果。这是我的参数scan --files ${project_loc:/sze}/target/classes,${project_loc:/sze}/target/test-classes --storeDirectory c:/trash/neo4j。输出与 maven-build 相同,它扫描 441 个类,然后扫描 106 个类。

谁能给我一个提示,命令行调用有什么问题?或者从一开始就回答这个问题的最佳解决方案是什么。

4

1 回答 1

1

我认为最好的选择是调试 maven-plugin,因为这样所有配置和类路径问题都解决了。这并不像我想象的那么复杂。以下步骤解决了我的问题:

  1. 克隆项目git clone https://github.com/buschmais/jqa-maven-plugin.git并签出稳定版本,例如git checkout -b 1.2.0
  2. 导入jqassistant-maven-plugin到您的 Eclipse 工作区。
  3. 准备好你的 maven-run-configuration 并添加-Xdebug -Xnoagent -Djava.compile=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005为 VM-Arguments。
  4. 创建一个调试配置Remote Java Application并选择为Project jqassistant-maven-plugin. 设置Connection Propertieslocalhost5005
  5. ScannerImpl在方法扫描中设置断点。其他好的候选者是ClassFileScannerPluginClassVisitor
  6. 启动 maven 运行配置,然后启动调试配置。

现在您可以轻松地调试代码。不幸的是,许多访问者模式很难理解它是如何工作的。

根据我的分析,我可以说,只分析了类和测试类中的文件。库中的所有类只能通过引用进入数据库。我猜这org.objectweb.asm.ClassReader不会简单地忽略不在类路径中的引用。这就是为什么命令行版本没有找到这么多元素的原因。

于 2017-02-28T15:38:13.913 回答