【问题标题】:Maven-2: How to change a dependency's location?Maven-2:如何更改依赖项的位置?
【发布时间】:2013-01-05 22:15:47
【问题描述】:

默认情况下,Maven 将从本地存储库(.m2 目录)中获取所有依赖项。但相反,我希望它从另一个位置获取依赖项。这甚至可能吗?

我不想对所有事情都这样做。我不希望这发生在“根”或父级。我希望这发生在更“更深”的 pom 级别。不止一次,同一个依赖是依赖。每次,我都希望它来自不同的位置。因此,一个会使用默认的 maven 配置并从 .m2 目录中获取,而另一个会从特定目录中获取。


我的理由:

在安装阶段,所有内容都安装到 .m2 目录中。在打包阶段,我将所有内容打包到目标目录中。 (我说的不对吗?)

我的 .m2 目录比需要的要多。我的目标有我的最终项目,没有包含在 .m2 目录中的额外“东西”。目标目录中的任何内容都是最终产品。当我处于编译阶段时,我不希望它依赖于 .m2 目录,而是依赖于目标,因为那是我真正的最终项目。


我在 Linux (Red Hat) 上使用 Maven 2.2.1。

我在某处读到,您可以在pom.xml 文件中的<dependency> 元素下使用具有system 值的<scope> 元素。然后在<dependency> 下的另一个名为<systemPath> 的元素中给出实际位置。我不知道这是否回答了我的问题,或者这是否完全不同。

我知道这违背了 Maven 的建议,但我有我的理由。

【问题讨论】:

  • 这背后的原因是什么?如果它们实际上是两个不同的版本,那么您应该安装它们并适当地引用它们。如果它们是相同的版本,那么在本地抓取它与从其他位置抓取它有什么区别?也许有了更多信息,我们可以更好地回答您的问题。
  • @gwhitake 我做了一些编辑。我希望能更好地解释它。

标签: maven maven-2 dependencies dependency-properties dependency-management


【解决方案1】:

请先阅读我对此different, but related, question 的回答。

一般来说,当谈到 Maven 时,人们已经形成了肌肉记忆。举个例子,几乎每个人都认为这是使用 Maven 构建项目的方式:

$ mvn clean install

现在这将构建项目,但它还将构建的工件存储在本地存储库中..,如果您随后要处理子模块并希望始终安全地重建所有内容,这很好,或者如果您使用的 IDE 对反应器了解不足(大多数 IDE 的较新版本没有此问题)

你应该做的是

$ mvn clean verify

或者

$ mvn clean package -DskipTests

(第二个跳过测试,因为如果您不关心确保集成测试通过,您可能也不关心单元测试)

所以在我看来,你只是输入了错误的命令......

现在还有第二种可能性,即您可能正在构建一个不作为传递依赖项公开的“瞬态、中间”工件......在这种情况下,您可以将<skip>true</skip> 添加到 maven 的配置中-在该特定模块中安装插件(也可以考虑添加到 maven-deploy-plugin)但是您需要确保该模块不会通过传递依赖泄漏,否则所有地狱都会崩溃。

【讨论】:

    【解决方案2】:

    转到你的 maven 安装目录让我们说C:\apache-maven-2.2.1. 遍历bin目录 编辑 m2.conf。 默认设置是

    set maven.home default set maven.home default ${user.home}/m2
    

    根据需要更改此设置。

    【讨论】:

    • 我不希望这发生在父级。我对我的问题进行了一些修改。
    • “更深”是指您想要多个 m2 存储库用于相同的 maven 安装?我想我没有关注您的编辑...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 2013-12-19
    • 2018-06-27
    • 1970-01-01
    • 2011-11-24
    相关资源
    最近更新 更多