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
我不知道你的编程经验是什么,但那不是一个琐碎的任务。
首先,您可以看到依赖项的叠加级别由符号表示。您可以做的最简单的事情是建立一个堆栈,存储从根到chilren,孙子,...的依赖路径:
def build_stack(text):
stack = []
for line in text.split("\n"):
if not line:
continue
line = line[7:] # remove [INFO]
level = line.count("|")
name = line.split("-", 1)[1].strip() # the part after the -
stack = stack[:level] + [name] # update the stack: everything up to level-1 and name
yield stack[:level], name # this is a generator
for bottom_stack, name in build_stack(DATA):
print (bottom_stack + [name])
输出:
['org.antlr:antlr4:jar:4.7.1:compile']
['org.antlr:antlr4:jar:4.7.1:compile', 'org.antlr:antlr4-runtime:jar:4.7.1:compile']
['org.antlr:antlr4:jar:4.7.1:compile', 'org.antlr:antlr-runtime:jar:3.5.2:compile']
['org.antlr:antlr4:jar:4.7.1:compile', 'com.ibm.icu:icu4j:jar:58.2:compile']
['commons-io:commons-io:jar:1.3.2:compile']
['brs:dxprog-lang:jar:3.3-SNAPSHOT:compile']
['brs:dxprog-lang:jar:3.3-SNAPSHOT:compile', 'brs:libutil:jar:2.51:compile']
['brs:dxprog-lang:jar:3.3-SNAPSHOT:compile', 'brs:libutil:jar:2.51:compile', 'commons-collections:commons-collections:jar:3.2.2:compile']
['brs:dxprog-lang:jar:3.3-SNAPSHOT:compile', 'brs:libutil:jar:2.51:compile', 'org.apache.commons:commons-collections4:jar:4.1:compile']
['brs:dxprog-lang:jar:3.3-SNAPSHOT:compile', 'brs:libutil:jar:2.51:compile', 'org.apache.commons:commons-collections4:jar:4.1:compile', 'com.fasterxml.jackson.core:jackson-annotations:jar:2.9.0:compile']
['brs:dxprog-lang:jar:3.3-SNAPSHOT:compile', 'brs:libutil:jar:2.51:compile', 'org.apache.commons:commons-collections4:jar:4.1:compile', 'com.fasterxml.jackson.core:jackson-core:jar:2.9.5:compile']
def create_tree(text):
tree = {}
for stack, name in build_stack(text):
temp = tree
for n in stack: # find or create...
temp = temp.setdefault(n, {}) # ...the most inner dict
temp[name] = {}
return tree
from pprint import pprint
pprint(create_tree(DATA))
{'brs:dxprog-lang:jar:3.3-SNAPSHOT:compile': {'brs:libutil:jar:2.51:compile': {'commons-collections:commons-collections:jar:3.2.2:compile': {},
'org.apache.commons:commons-collections4:jar:4.1:compile': {'com.fasterxml.jackson.core:jackson-annotations:jar:2.9.0:compile': {},
'com.fasterxml.jackson.core:jackson-core:jar:2.9.5:compile': {}}}},
'commons-io:commons-io:jar:1.3.2:compile': {},
'org.antlr:antlr4:jar:4.7.1:compile': {'com.ibm.icu:icu4j:jar:58.2:compile': {},
'org.antlr:antlr-runtime:jar:3.5.2:compile': {},
'org.antlr:antlr4-runtime:jar:4.7.1:compile': {}}}
{'brs:dxprog-lang:jar:3.3-SNAPSHOT:compile': {'brs:libutil:jar:2.51:compile': {'commons-collections:commons-collections:jar:3.2.2:compile': {},
'org.apache.commons:commons-collections4:jar:4.1:compile': {'com.fasterxml.jackson.core:jackson-annotations:jar:2.9.0:compile': {},
'com.fasterxml.jackson.core:jackson-core:jar:2.9.5:compile': {}}}},
'commons-io:commons-io:jar:1.3.2:compile': {},
'org.antlr:antlr4:jar:4.7.1:compile': {'com.ibm.icu:icu4j:jar:58.2:compile': {},
'org.antlr:antlr-runtime:jar:3.5.2:compile': {},
'org.antlr:antlr4-runtime:jar:4.7.1:compile': {}}}
第三,您需要格式化树,即1。提取数据和2。将子级分组到列表中。这是一个简单的树遍历(这里是DFS):
def format(tree):
L = []
for name, subtree in tree.items():
group, artifact, packaging, version, scope = name.split(":")
d = {"artifact":artifact} # you can add group, ...
if subtree: # children are present
d["children"] = format(subtree)
L.append(d)
return L
pprint(format(create_tree(DATA)))
输出:
[{'artifact': 'antlr4',
'children': [{'artifact': 'antlr4-runtime'},
{'artifact': 'antlr-runtime'},
{'artifact': 'icu4j'}]},
{'artifact': 'commons-io'},
{'artifact': 'dxprog-lang',
'children': [{'artifact': 'libutil',
'children': [{'artifact': 'commons-collections'},
{'artifact': 'commons-collections4',
'children': [{'artifact': 'jackson-annotations'},
{'artifact': 'jackson-core'}]}]}]}]
你也许可以分组。
我正在创建一个新的Karaf特性,它将包含几个包(jclouds)。我还有一个maven“superproject”(jclouds-all),它包含我需要的所有模块/包。 在定义特性时,是否可以只指定一个SuperProject的bundle,并自动解析所有具体的bundle,或者我需要在特性中列出所有的bundle?
问题内容: 假设我有四个项目: 项目A(依赖于B和D) 项目B(依赖于D) 项目C(依赖于D) 项目D 在这种情况下,如果我运行项目A,则Maven将正确地解决对D的依赖关系。如果我理解正确,则Maven始终以最短的路径获取依赖关系。由于D是A的直接依赖项,因此将使用B内指定的D而不是D。 但是现在假设这种结构: 项目A(依赖于B和C) 项目B(依赖于D) 项目C(依赖于D) 项目D 在这种情况下
我已经在pom中配置了本地maven存储库。xml。当我构建项目时,它会显示依赖项下载错误(请参阅下面的日志)。Maven正在尝试从我的本地Maven存储库下载所有依赖项。 日志 这是我的pom。xml文件 本地存储库是http://XXX。XXX。XX。XXX:8081/artifactory/libs本地发布 xml。背景
我正在开发一个运行在Tomcat上的基于Maven的Web应用程序。我正在尝试将依赖项添加到我的maven项目中。然而,当我试图构建我的项目时,底部的错误发生了。我尝试在本地安装依赖项,但我也无法使其正常工作。我想重新安装Maven,但不知为什么我只能停用它。如果你需要更多的信息,请告诉我,我可以提供。 当我尝试构建项目时输出: 下面是完整的pom.xml文件:
在下面的示例中,OSGi解析和Maven依赖支持中所需的步骤似乎存在差异/重复。 我有一个jar,它依赖于外部第三方jar,在本例中时间为4J。 然后,我可以通过导入包并运行等方式在本地运行我的简单jar。 当导入OSGi时,我必须确保首先导入这个jar,通常使用PAX包装URL。 这对于一个jar依赖关系是可以的,但是当有多个依赖关系时又如何。我可以使用features.xml文件来收集这些JA
我希望有人面对同样的问题来解决依赖。下面提到的文件 xsi:schemalocation=“http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”xmlns=“http://maven.apache.org/pom/4.0.0”xmlns:xsi=“http://www.w3.org/2001/x