【问题标题】:Knowing your dependencies in maven了解你在 Maven 中的依赖关系
【发布时间】:2010-02-23 09:29:59
【问题描述】:

如果您使用的是封闭存储库,但您的应用程序使用了来自外部(maven 公共)存储库的一些依赖项。

有没有一种方法可以使用来自内部和外部存储库的依赖项生成列表。

或者我必须手动完成,只放置内部存储库以及我的构建失败的依赖项是外部的,或者您认为第三种方法可以获得更好的结果。谢谢

编辑

@Pascal Thivent

这是交易:

假设我的项目仅使用 2 个依赖项: 第一个是:junit 第二个是:速度

现在让我们假设 log4j 是 junit 的传递依赖项(这是我的项目使用的依赖项之一)。

让我们假设速度没有任何传递依赖。让我们想象一下,velocity 在我的公司存储库中,我知道 junit 正在从 maven 存储库下载,但我不知道 log4j,因为我没有将它放在 <dependecies> 标记中。

有没有办法我可以获得依赖项列表或其他东西..它将通过它们来自的存储库或类似的东西对依赖项进行分组:

velocity - 企业存储库 junit - Maven 存储库 log4j - Maven 存储库

或者如果我使用 mirrorof 来指定明确使用公司存储库,maven 会告诉我我缺少哪些工件,包括传递依赖项中的那些?

tnx

【问题讨论】:

    标签: java eclipse maven-2


    【解决方案1】:

    我会为此目的使用dependency:purge-local-repository,并分析控制台输出以查看依赖项是从哪里(重新)解决的。

    如果最后您使用的是企业存储库并希望强制 Maven 将其用于所有请求(即从不访问公共存储库),那么您应该将企业存储库声明为 mirrorOf@@ 中的所有存储库987654324@:

    <settings>
      ...
      <mirrors>
        <mirror>
          <id>corporate-repository</id>
          <mirrorOf>*</mirrorOf>
          <name>Maven Repository Manager running on repo.mycompany.com</name>
          <url>http://repo.mycompany.com/proxy</url>
        </mirror>
      </mirrors>
      ...
    </settings>
    

    但我可能在这里推断太多了。

    更新:

    或者如果我使用 mirrorof 来指定明确使用公司存储库,maven 会告诉我我缺少哪些工件,包括传递依赖项中的那些?

    是的。

    【讨论】:

    • @Pascal Thivent 谢谢你 Pascal 我想我就是我想要的,在运行之前让我先问你.. purge-local-repository .. 我不会从本地清除/删除任何东西存储库通过运行这是我吗?
    • @c0mrade 好吧,mojo 的文档明确指出:从本地存储库中删除项目依赖项,并可以选择重新解决它们。 所以,是的,这正在发生从本地存储库中删除项目依赖项(实际上是这个想法)。但这应该不是问题,除非您在本地存储库中为此项目手动安装了工件。如果您有疑问,请先进行备份或本地存储库(例如cp ~/.m2/repository ~/.m2/repository.orig)。
    • @Pascal Thivent 再次感谢你,我想我没有按照我想要的方式表达自己我知道你来自哪里。问题是我们只想使用我们的“公司”存储库,正如您在上面的回答中解释的那样,如何做到这一点,但问题是我们对我们的公司有一些依赖,一些依赖于 Maven 存储库。我想全部下载它们,以便它们可以上传到公司存储库并仅从那里使用,现在问题是我不知道从哪里下载了哪些依赖项..如果我知道所有外部依赖项,我会下载它们并从 c 存储库中使用它们
    • @c0mrade 嗯...我很困惑 :) 无论如何,可行的一件事是: 1. 将公司回购声明为 mirrorOf 所有正如我提到的 2. 使用 purge-local-repository 和在公司存储库级别安装每个缺少的依赖项或将所需的存储库添加到代理,直到修复构建。如果您在一台机器上本地执行此操作,则不应中断工作。
    • @Pascal Thivent 让我重新表述我的问题,我想它会更清楚,我自己现在有点困惑.. 让我至少试着解释一下..
    【解决方案2】:

    我猜您必须在您的公司存储库服务器上使用NexusArtifactory,以便根据需要将远程存储库中的工件透明地下载到您的公司存储库中。

    如果您只想知道项目的传递依赖关系,m2eclipse 会给出一个依赖关系图,它的层次结构。

    【讨论】:

    • 当您代理远程存储库时,您只会从公共存储库下载一次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多