有没有一种方法可以列出使用特定Maven包的项目?

4

背景:

我有多个项目在业务逻辑上使用相同的逻辑,因此我决定将共享部分拆分并在两个项目中引用它。

例子:

假设有一个人力资源应用程序和一个会计应用程序需要共享业务,在这种情况下让我们说 count hours 是计算类(让我们称其为 calc)的一部分。

HR 和 Accounting 两个应用程序都有自己的 gitlab 存储库。也有独立的部署,并且使用上传到 nexus 存储库的 calc 包。

enter image description here

问题:

我想知道是否有一种方法可以通过包名称在存储库之间查找使用 calc 包的项目。


1
这需要成为您的源代码版本控制系统或Nexus的功能,因为它需要元数据,而默认情况下不会收集。如果您使用构建服务器,则可以配置它来告诉您。 - Thorbjørn Ravn Andersen
1
mvnrepository.comgithub.com 这样的网站可以显示其他项目中依赖包的使用/计数。我猜它们通过解析系统上所有的 pom/gradle/etc 构建文件来实现这一点。如果没有现有的解决方案/插件,你就需要自己编写一些东西。 - slindenau
2
刚刚偶然发现了这个答案:https://dev59.com/4GQm5IYBdhLWcg3wswpv#34066648 - 它谈到了一个用于构建依赖关系图的工具,虽然这个答案有点老,但是这个工具似乎仍在积极开发中:https://github.com/ltearno/pom-explorer。也许那个问题的其他答案也能对你有所帮助? - cyberbrain
1
那么你的项目“ACC”和“HR”没有将它们的构建结果发布到(即使是本地的)Maven仓库服务器上? - cyberbrain
1
不,如果您已经使用Nexus并使用mvn deploy发布了ACC和HR的jar包,那么所有基于Maven的解决方案都应该可以工作 - 即使在本地机器上没有源代码可用。也许元数据将被缓存在本地机器上,但这应该会自动在后台发生。 - cyberbrain
显示剩余6条评论
2个回答

5
如果您想要本地检查项目,则可以找到每个项目的依赖树:
mvn dependency:tree 这将给出所有被使用的项目的(传递性)依赖关系。如果对每个项目执行此操作,然后在其中搜索您的软件包名称,这应该能够找到使用它的所有项目,或者至少具有对其的依赖关系。

这看起来比编写搜索脚本要干净得多。但是,我想在不检出项目的情况下完成它。 - Hoshani
我不知道有任何可以远程完成这个任务的解决方案。但你只需要pom文件(但要注意多模块项目中树形结构中的pom文件)。 - Rob Audenaerde

1
我不确定如何通过软件包名称计算依赖关系。但是:
  • 如果您可以访问源代码,则可以扫描您的项目中的pom.xml并查找依赖项
  • 如果您可以访问运行时库,则可以扫描这些jar文件的/META-INF/maven/*/*/pom.xml并检查依赖项
无论哪种方式,您都应该能够找到使用Calc的jar文件。 没有办法询问Calc从哪里使用。

我的第一反应是扫描每个项目中的 pom.xml 文件,但这似乎有点繁琐,我需要每次更新我要查找的内容。虽然这样可以工作,但我认为我们可以找到更好的方法。 - Hoshani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接