2017-08-15 19 views
0

是否有管理,跟踪和涉及到大量使用Maven的Java源项目的所有库的依赖报告的工具吗?和管理上的所有开源项目的Java Maven依赖报告为一个大项目

使用Maven来管理构建时间依赖性很好,但是如果有大量源代码项目(比如50个)都有自己的Maven pom.xml,是否有任何工具或产品可以用来回答如

  • 什么是我们所有源 项目中使用的整套库?
  • 什么库的版本,我们使用的是?
  • 是我们始终如一地利用图书馆Y的X版本在所有开源项目, 还是我们有库的版本中使用的稳定的混合?

回答

0

我从来没有听说过这样的工具。你可以做什么:

  1. 每个项目使用dependency:list和比较/合并结果(写一个脚本)。

  2. 使用的材料明细表。这对管理依赖版本很有用。您可以列出所有通常的版本依赖关系,并将BOM导入到所有项目中,这样您就可以在任何地方获得相同的版本。

  3. 结合您的单独的项目为多模块项目。然后,您可以修复父pom中的版本,还可以更多地分析和影响版本。

+0

#1是一个选项,我们已经使用了一些东西,直到这一点。从项目一开始,#2就可以实现,但现在已经有不同的项目管理自己的依赖关系,并且可能存在不同的库版本,现在引入BOM将是不平凡的。对于#3我们已经有相关的项目构建为多模块项目,但对于不相关的项目来说,这并不合理(至少在我们的情况下) –

0

对于我使用编译代码和收集依赖关系的项目。这是一个python脚本,用于获取包含每个项目的完整maven输出dependency:list的所有文件。这样做的目的只是为了让我来加载依赖于运行一个程序,但你可以修改脚本做更好的事情与相关性集合的

#!的/ usr/bin中/ python3

from os import listdir 

from os.path import isfile, join 

files = [join("deps/", f) for f in listdir("deps/") if isfile(join("deps/", f))] 

allParts = [] 

#Need to exclude all.dep 
for entry in files: 
    print("Considering: ", entry) 
    if entry == "deps/all.dep": 
     continue 
    f = open(entry, 'r') 
    lines = f.readlines() 
# for line in lines: 
#  if line.startswith("[WARNING]"): continue 
#  if line.startswith("Down"): continue 
    if(entry == "deps/dockhorn.dep"): 
     print(lines) 
    parts = lines[-1][:-1].split(":") 
    print(parts) 
    allParts.extend(parts) 
s = set(allParts) 
print("\n".join(s)) 

f = open("deps/all.dep", 'w') 
f.write(":".join(s) + "\n") 
f.close()