GraphGists

使用 Maven dependency:list 转换为 Cypher 的 Neo4j 依赖关系图

介绍

Neo4j github 由于难以手动维护最新版本,因此缺少概述文档。

这个 GIST 是使用 Neo4j 了解 Neo4j 的方法的第一版!

Maven → Neo4j

Maven 是用于 Neo4j 的构建工具,它附带用于列出依赖项的插件。不幸的是,graphml 输出与 graphml APOC 导入工具不兼容,因为命名约定不同。可以通过更新 APOC 代码以支持 Maven graphml 格式来解决此问题,但这个 GIST 展示了一种将 tgf 输出转换为 Cypher 的方法,使其能够正常工作。

在 Windows 上,如果你已成功构建 Neo4j,则可以使用以下命令为每个 pom.xml 文件创建一个 pom.tgf 文件。

mvn dependency:tree "-DoutputFile=pom.tgf" "-DoutputType=tgf"

tgf 格式非常简单,易于转换为 Cypher。为此,我将 tgf 文件拆分为两部分。nodes.tgf 和 edges.tgf,节点在 # 标记之上,边在 # 标记之下。然后,我使用 awk(通过 Cygwin)生成用于加载依赖项的 Cypher 代码。

在此示例中,我使用 neo4j\packaging\standalone\standalone-community 中的 pom.tgf

cat nodes.tgf | awk -F "[ :]" '{print "CREATE (n:Package {name:'"'"'"$3"'"'"', mvnid:'"'"'"$1"'"'"', org:'"'"'"$2"'"'"', build:'"'"'"$4"'"'"', version:'                   "'"'"$5"'"'"'});" }' > nodes.cypher

以及

 cat edges.tgf | awk '{print "MATCH (a:Package),(b:Package) WHERE a.mvnid = '"'"'"$1"'"'"' AND b.mvnid = '"'"'"$2"'"'"' CREATE (a)-[r:"$3"]->(b);"}' > ed                   ges.cypher

然后使用 cypher-shell 运行 nodes.cypher,然后运行 edges.cypher。

设置

MATCH (n1)-[r]->(n2) RETURN r, n1, n2 LIMIT 250;