在 maven 中找到每个依赖项的原始存储库
Locate original repository of each dependency in maven
场景:
新的企业政策禁止使用 public 个存储库。对于每个使用的依赖项(很多),我们必须向 devOps 团队提供工件组、id、版本以及它来自哪个存储库。
我们在代码库中使用了不止一个外部存储库。由于所有工件现在都在本地存储库中,我们不知道它们来自哪里。
我能做的:
我可以用
mvn dependency:list -DoutputAbsoluteArtifactFilename=true -DprependGroupId
在每个项目上获取工件组、ID、版本。
然后 mvn dependency:list-repositories 获取该项目中使用的存储库
缺少什么:
知道哪个工件来自哪个存储库。
提前致谢
恐怕这在 maven 中是不可能的。在 maven 3.0.x 之前,maven 甚至不跟踪远程存储库。在 Maven 3.0.x 之后,它转向了 eclipse aether。 Eclipse aether 为每个包含存储库信息的存储库创建 _remote.repositories 文件。它包含在您的 settings.xml 文件中定义的存储库 ID。你可以,
- 删除您的本地存储库内容。
运行 以下命令,
find . -name _remote.repositories -exec grep "^[^#;]" {} \; > repo_info.txt
这至少会给你映射。
列出您使用的所有外部存储库。此外,获取所有 groupId、artifactId、版本的列表(通过 dependency:list
每个项目或通过扫描本地存储库)。现在对于每个依赖项,通过 REST 询问外部存储库是否包含此依赖项。
如果您从 MavenCentral 开始,您很有可能在第一次尝试时找到您的依赖项。
场景: 新的企业政策禁止使用 public 个存储库。对于每个使用的依赖项(很多),我们必须向 devOps 团队提供工件组、id、版本以及它来自哪个存储库。
我们在代码库中使用了不止一个外部存储库。由于所有工件现在都在本地存储库中,我们不知道它们来自哪里。
我能做的:
我可以用 mvn dependency:list -DoutputAbsoluteArtifactFilename=true -DprependGroupId 在每个项目上获取工件组、ID、版本。
然后 mvn dependency:list-repositories 获取该项目中使用的存储库
缺少什么:
知道哪个工件来自哪个存储库。
提前致谢
恐怕这在 maven 中是不可能的。在 maven 3.0.x 之前,maven 甚至不跟踪远程存储库。在 Maven 3.0.x 之后,它转向了 eclipse aether。 Eclipse aether 为每个包含存储库信息的存储库创建 _remote.repositories 文件。它包含在您的 settings.xml 文件中定义的存储库 ID。你可以,
- 删除您的本地存储库内容。
运行 以下命令,
find . -name _remote.repositories -exec grep "^[^#;]" {} \; > repo_info.txt
这至少会给你映射。
列出您使用的所有外部存储库。此外,获取所有 groupId、artifactId、版本的列表(通过 dependency:list
每个项目或通过扫描本地存储库)。现在对于每个依赖项,通过 REST 询问外部存储库是否包含此依赖项。
如果您从 MavenCentral 开始,您很有可能在第一次尝试时找到您的依赖项。