Maven資源庫掃描程序將孤立地處理所有工件,即掃描類時不評估它們之間的依賴關係。
這與從目錄中掃描多個JAR文件的行爲相同,因此只有涉及的類位於相同的工件中時,才能解析類之間的依賴關係(方法調用,繼承層次結構等)。
由於在Maven倉庫中已知工件之間的依賴關係,因此應該可以應用類似於「classpath:*」概念的解析這些依賴關係的查詢,但這需要進行評估。
更新
下面的查詢將有助於獲得類之間基於類的依賴關係(DEPENDS_ON)在不同的工件:在多金屬氧酸鹽基於聲明的依賴性工件之間
構建DEPENDS_ON關係:
MATCH
(r:Repository)-[:CONTAINS_POM]->(p1:Pom)-[:DESCRIBES]->(a1:Java:Archive),
(r:Repository)-[:CONTAINS_POM]->(p2:Pom)-[:DESCRIBES]->(a2:Java:Archive),
(p1)-[:DECLARES_DEPENDENCY]->(a2)
MERGE
(a1)-[:DEPENDS_ON]->(a2)
RETURN
a1.fqn, collect(a2.fqn)
將工件所需的類型解析爲包含在作爲依賴關係的工件中的工件類型,創建一個關係RESOLVES_TO:
MATCH
(a1:Artifact)-[:DEPENDS_ON]->(a2:Artifact),
(a1)-[:REQUIRES]->(requiredType:Type),
(a2)-[:CONTAINS]->(containedType:Type)
WHERE
requiredType.fqn = containedType.fqn
MERGE
(requiredType)-[:RESOLVES_TO]->(containedType)
RETURN
a1.fqn, a2.fqn, collect(requiredType.fqn)
基礎上,RESOLVES_TO關係類型之間
傳播DEPENDS_ON關係:
MATCH
(a1:Artifact)-[:REQUIRES]->(requiredType:Type),
(a1)-[:CONTAINS]->(type:Type)-[:DEPENDS_ON]->(requiredType),
(a2:Artifact)-[:CONTAINS]->(resolvedType:Type),
(requiredType)-[:RESOLVES_TO]->(resolvedType:Type)
MERGE
(type)-[dependsOn:DEPENDS_ON]->(resolvedType)
SET
dependsOn.resolved=true
RETURN
a1.fqn, type.fqn, a2.fqn, collect(resolvedType.fqn)
這是否對你的工作?
謝謝。實際上,使用Maven回購(尤其是POM)的結構來避免「重複節點」會很好。那麼在我們的大公司Maven回購中找到建築問題會容易得多。 –
感謝您的快速更新。我目前正在等待第二個查詢(在144GB數據庫中需要一些時間...)。我下週休假,然後我會到德累斯頓參加你的研討會,所以不要指望我回答得太快。 –