我有一个由多个Web应用程序(war)和库(jar)组成的系统。所有这些都使用maven并且在我的控制之下(源代码,在Nexus中构建的工件,......)。假设应用程序A直接使用库L1而间接使用L2(它从L1使用)。我可以使用maven的依赖:tree或graph:project plugins轻松地从应用程序自上而下检查依赖树。但是我如何检查谁在使用我的图书馆?从我的例子中,我想知道,A是否是唯一使用L1的应用程序(或库),而L2是从L1和其他应用程序中使用的,比如说B.是否有maven或nexus的插件或者我应该尝试一下为此写一些脚本?你有什么建议?
答案 0 :(得分:4)
如果您希望在存储库级别实现此目的,Apache Archiva在项目信息下列出了“使用者”功能
。
这类似于mvnrepository.com在工件描述的“used by”部分下列出的内容。
不幸的是,Nexus似乎没有提供同等功能。
现在我认为为此维护另一个存储库会很麻烦,但是它可能比其他一些答案建议更容易,例如向Nexus编写插件。我相信Archiva可以配置为代理其他存储库。
<强>更新强>
事实上,还有plugin for Nexus来实现“使用者”功能。
答案 1 :(得分:3)
据我所知,这些行中没有任何内容作为开源工具存在。你可以编写一个Nexus插件来遍历一个repo,并通过遍历所有pom并分析它们来检查所有其他组件中组件的用法。这将是一项相当繁重的任务,因为它必须查看所有组件并解析所有的poms。
以类似的方式,您可以使用其他工具在本地存储库中执行此操作。但是,解析repo管理器而不是本地存储库的内容可能更有意义。
答案 2 :(得分:2)
我认为没有Maven方法可以做到这一点。话虽这么说,有办法做这个或类似的事情。以下是一些例子:
在您喜欢的IDE中打开您的项目。例如,Eclipse将帮助您在类级别进行影响分析,大部分时间都可能足够好
在源目录中使用简单的“grep
”。这可能听起来有些过时(以及说明显而易见的),但我们已经使用了很多
使用Sonargraph或Lattix等依赖性分析工具
答案 3 :(得分:2)
我不知道这个工作有任何公共图书馆,所以我写了一个定制的应用程序,它为我做。 我使用的是一个包含70多件工件的发行版。在修改工件之后很多次,我想确保更改是向后兼容的(即,在依赖工件中不引入编译错误)。要实现这一点,了解修改后的工件的所有依赖关系至关重要。
因此,我编写了一个应用程序,它扫描目录(/子目录)下的所有工件,提取它们的pom.xml并搜索(在pom的依赖部分中)以发生修改的工件。 (我在java中做过这个,虽然shell / windows脚本可以更紧凑地完成这个。)
我很乐意在github上分享代码,如果有任何帮助的话。
答案 4 :(得分:2)
一种可能适合您需求的方法是创建一个包含所有maven项目的主人。然后在master-pom上运行以下命令:
mvn dependency:tree -DoutputType=graphml -DoutputFile=dependency.graphml
在yEd中打开生成的文件。
使用此处的说明: http://www.summa-tech.com/blog/2011/04/12/a-visual-maven-dependency-tree-view/
答案 5 :(得分:1)
更有趣的可能是:你会对这些信息做些什么?告知A的开发人员不再使用库L1或L2,因为它有一个关键的错误?
在我看来,您应该能够在您的存储库管理器上创建依赖项/父/插件的黑名单。一旦项目尝试使用列入黑名单的工件部署/上传自身,它就会失败。我说uploading
而不是downloading
,因为这可能会破坏很多项目。据我所知,这还没有任何存储库管理器可用。
答案 6 :(得分:1)
解决此问题的方法之一是在Java本身之外:编写一个操作系统级别的监视脚本,该脚本跟踪所讨论的jar文件中fopen()的每个案例!假设这是在公司环境中,您可能需要等待几周(!)以允许所有使用进程至少访问一次库!
在Windows上,您可以使用Sysinternals Process Monitor执行此操作: http://technet.microsoft.com/en-us/sysinternals/bb896645
在Unix变体上,您可以使用DTrace或strace。
答案 7 :(得分:1)
理论上,您可以编写一个脚本来抓取存储库中的每个项目,然后解析maven build.xml(假设它们都使用maven)并查看它们是否已经定义了对工件的依赖关系。如果组织中的所有项目都遵循标准的maven结构,那么编写一个这样的脚本应该很容易(尽管如果这些项目中的任何一个通过传递依赖项与您的工件有依赖关系,那么事情会变得有点棘手)。 / p>