【问题标题】:Maven without (remote) repository?没有(远程)存储库的 Maven?
【发布时间】:2011-02-28 11:12:06
【问题描述】:

我有一个 Maven 2 多模块项目,并希望确保所有内容都取自我的本地签出源。

  • 是否可以告诉 Maven 永远不要为它的源模块下载任何东西?我必须禁用远程存储库吗?
  • Maven 是否总是必须采用昂贵的方式将模块安装到本地存储库中,然后为每个依赖项再次提取它?
  • 如果本地源发生更改,Maven 是否会自动重新编译模块的依赖项,然后再编译依赖项?

【问题讨论】:

    标签: maven repository multi-module


    【解决方案1】:

    是否可以告诉 Maven 永远不要为它的源模块下载任何东西?

    没有。 Maven 2 仅在构建时“看到”当前模块。从好的方面来说,您可以通过在模块中运行 Maven 来构建树的一部分。

    我必须禁用远程存储库吗?

    是的,使用“离线”选项-o-offline。或者将settings.xml 与没有任何文件的代理一起使用。不过,这不是你想要的。

    Maven 是否总是必须采用昂贵的方式将模块安装到本地存储库中,然后为每个依赖项再次提取它?

    是的,但它并不昂贵。在构建期间,文件被复制(十年前这很昂贵)。当使用依赖项时,Maven 只是将文件的路径添加到 Java 进程中。所以文件不会再次被复制或修改。 Maven 假定本地存储库中的文件不会更改(或仅在下载/安装发生时更改一次)。

    如果本地源发生更改,Maven 是否会自动重新编译模块的依赖项?

    没有。有 Maven 3 的计划,但我找不到启用类似功能的选项。

    要解决您的问题,您应该安装本地代理(例如 Nexus)。

    【讨论】:

      【解决方案2】:
      1. 仅当本地存储库 ($USER_HOME/.m2/repository) 中不可用时,Maven 才下载东西(依赖项)。如果您不想下载任何内容,请使用离线模式。这可以通过使用-o 开关来完成。例如

        mvn -o clean install
        
      2. 里面没有什么贵的。如果您正在构建 complete 父项目,它将构建所有模块,然后将工件复制到您的本地存储库。然后,当您构建一个依赖于这些项目的项目时,Maven 只会将它们从硬盘上的本地存储库复制到将为当前项目创建的包中。

      3. 。我被烧死了。 Maven 不会自动编译依赖项。有一个名为 Maven Reactor Plug-in 的插件。该插件使您可以在项目构建之前构建项目的依赖项。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-06
        • 2017-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-10
        • 1970-01-01
        • 2012-02-26
        相关资源
        最近更新 更多