没有(远程)存储库的Maven?

时间:2011-02-28 11:12:06

标签: maven repository multi-module

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

  • 是否可以告诉Maven永远不会为其拥有的模块下载任何内容?我是否必须禁用远程存储库?
  • Maven是否总是必须采用昂贵的方式将模块安装到本地存储库中,然后再为每个依赖项提取它?
  • 如果模块的本地源发生了变化,Maven是否会自动首先重新编译模块的依赖项,然后编译依赖项?

2 个答案:

答案 0 :(得分:10)

  

是否有可能告诉Maven永远不会为其拥有源代码的模块下载任何内容?

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

  

我是否必须禁用远程存储库?

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

  

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

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

  

如果模块的本地源发生了变化,Maven是否会自动首先重新编译模块的依赖项?

没有。 Maven 3有计划,但我找不到这样的选项。

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

答案 1 :(得分:7)

  1. Maven下载内容(依赖项),只有在您当地的reposiotory($USER_HOME/.m2/repository)中没有。如果您不想下载任何内容,请使用离线模式。这可以通过使用-o开关来完成。 E.g。

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

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