【发布时间】:2019-07-19 18:02:49
【问题描述】:
我希望能够将 maven 依赖树作为输入并对其进行解析,以确定每个依赖项的 groupId、artifactId 和版本及其子项(ren)(如果有)和子项(ren)的 groupId、artifactId 和 version(以及任何其他 child(ren) 等)。 我不确定在为 neo4j 准备数据之前解析 mvn 依赖树并将信息存储为嵌套字典是否最有意义。
我也不确定解析整个 mvn 依赖树的最佳方法。下面的代码是我在尝试解析、删除前面不必要的信息并将某些内容标记为孩子或父母方面取得的最大进展。
tree=
[INFO] +- org.antlr:antlr4:jar:4.7.1:compile
[INFO] | +- org.antlr:antlr4-runtime:jar:4.7.1:compile
[INFO] | +- org.antlr:antlr-runtime:jar:3.5.2:compile
[INFO] | \- com.ibm.icu:icu4j:jar:58.2:compile
[INFO] +- commons-io:commons-io:jar:1.3.2:compile
[INFO] +- brs:dxprog-lang:jar:3.3-SNAPSHOT:compile
[INFO] | +- brs:libutil:jar:2.51:compile
[INFO] | | +- commons-collections:commons-collections:jar:3.2.2:compile
[INFO] | | +- org.apache.commons:commons-collections4:jar:4.1:compile
[INFO] | | | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.9.0:compile
[INFO] | | | \- com.fasterxml.jackson.core:jackson-core:jar:2.9.5:compile
.
.
.
fileObj = open("tree", "r")
for line in fileObj.readlines():
for word in line.split():
if "[INFO]" in line.split():
line = line.replace(line.split().__getitem__(0), "")
print(line)
if "|" in line.split():
line = line.replace(line.split().__getitem__(0), "child")
print(line)
if "+-" in line.split() and "|" not in line.split():
line = line.replace(line.split().__getitem__(0), "")
line = line.replace(line.split().__getitem__(0), "parent")
print(line, '\n\n')
输出:
| | \- com.google.protobuf:protobuf-java:jar:3.5.1:compile
child child \- com.google.protobuf:protobuf-java:jar:3.5.1:compile
| +- com.h2database:h2:jar:1.4.195:compile
child +- com.h2database:h2:jar:1.4.195:compile
parent com.h2database:h2:jar:1.4.195:compile
鉴于我对 python 的功能相对不熟悉,我将不胜感激有关以有组织的方式解析和返回数据的最佳方法的任何见解。提前谢谢!
【问题讨论】:
-
你完成了吗?代码开源了吗?
标签: python maven parsing neo4j dependency-tree