解決maven jar包衝突,使用python指令碼檢查
阿新 • • 發佈:2018-11-04
在mvn工程中,經常因為多級引入導致jar包衝突,然後會使用 mvn dependency:tree>dependency.txt 匯出mvn依賴樹關係 , 然後從dependency.txt檔案中解析出衝突的jar包即可。解析的python指令碼如下:
#encoding=utf-8 import re maven_pattern = "(\s*)\\[INFO\\](.+):(.+):(.+)" dependency_map = {} class Dependency(object): def __init__(self, groupId, artifactId, version): self.groupId = groupId self.artifactId = artifactId self.version = version def like(self, other): if self.groupId == other.groupId and self.artifactId == other.artifactId: return True return False def hash_value(self): return hash(self.groupId+":"+self.artifactId) def __str__(self): return "%s:%s:%s" % (self.groupId, self.artifactId, self.version) def is_maven_line(line): if re.match(maven_pattern, line) is None: return False else: return True def parse_dependency(line): if not isinstance(line, str): return splits = line.split(" ") if len(splits) < 3: return if splits[1] == '---' or splits[2] == 'Finished': # root的直接忽略 return dependency_info_line = splits[-1] dependency_info = dependency_info_line[:-1] lists = dependency_info.split(":") if len(lists) < 4: return d = Dependency(lists[0], lists[1], lists[3]) key = d.hash_value() if key in dependency_map: print(dependency_map.get(key)) print(d) else: dependency_map[key] = d # print("%s %s %s" % (groupId, artifactId, version)) if __name__ == "__main__": f = open("dependency.txt", 'r') try: lines = f.readlines() for line in lines: if is_maven_line(line): parse_dependency(line) finally: f.close()
執行效果如下: