2017-02-28 45 views
1

我想詳細瞭解jqassistant的掃描過程。例如它會掃描所有的Jar-Files和所有類,或者只有我從我的類中直接引用的那個。要回答這樣的問題,調試通常是一個不錯的選擇。通常情況下,你會像Maven插件一樣啓動jqassistant。 Debug maven plugin並不那麼容易。所以我認爲最好是簽出命令行客戶端。調試工作正常,但不幸的是我得到了完全不同的結果。這裏是我的參數scan --files ${project_loc:/sze}/target/classes,${project_loc:/sze}/target/test-classes --storeDirectory c:/trash/neo4j。輸出與maven-build中的輸出相同,它掃描441,然後掃描106個類。如何在eclipse中調試jQassistant

任何人都可以給我一個提示,命令行調用有什麼問題嗎?或者什麼是從一開始就回答問題的最佳解決方案。

回答

1

我認爲最好的辦法是調試Maven的插件,因爲那時所有的配置和classpath-問題都解決了。這並不像我想的那麼複雜。接下來的步驟解決自己的問題:

  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創建調試配置,選擇以Projectjqassistant-maven-plugin。將Connection Properties設置爲localhost5005
  5. 在方法掃描中設置斷點ScannerImpl。更多好的候選人是ClassFileScannerPluginClassVisitor
  6. 啓動Maven運行配置,然後啓動調試配置。

現在你可以很容易地調試代碼。不幸的是,許多訪客模式使得很難理解它是如何工作的。

根據我的分析,我可以說,只有在類和測試類文件進行了分析。庫中的所有類只通過引用進入數據庫。我猜org.objectweb.asm.ClassReader不會簡單地忽略不在類路徑中的引用。這就是爲什麼命令行版本沒有找到這麼多元素的原因。

+0

Maven插件決定要掃描哪些元素。默認情況下,這些是主文件和測試工件的類文件夾。爲在這些文件夾中找到的每個.class文件觸發ClassFileScannerPlugin。此外,scanIncludes選項允許添加更多文件(例如,額外的src/main /文件夾) 有一個想法可以掃描Maven模塊的整個文件內容作爲默認值,但這是一個功能請求。 –