Maven如何处理模块之间的依赖关系?

时间:2014-01-28 20:16:26

标签: maven dependencies

根据Maven lifecyclemvn install将“将软件包安装到本地存储库中,以用作本地其他项目的依赖项”。然后,本地存储库存储我远程下载的所有jar。

我的模块与其他模块有依赖关系。当我运行mvn package时,我的本地存储库中没有存储任何内容,但依赖项似乎已经完成。那么Maven如何处理模块间的依赖关系呢? Maven是从构建的目标目录中引用每个模块的jar还是从其他位置获取它们?

2 个答案:

答案 0 :(得分:1)

这取决于您正在执行的阶段。在compile之前,Maven将失败,因为没有编译的类。在compilepackage之间,使用target/classes。对于package及更高版本,使用target/artifactId-version.jar

答案 1 :(得分:1)

科里,

你是对的,严格按Maven docs暗示mvn compile

parent_pom/
  subA/
    pom.xml
  subB/
    pom.xml    # depends on subA

应该失败,因为subA尚未被推送到本地仓库。

幕后发生的事情是,Maven使用reactor来欺骗构建,以查看同一版本中早期子模块的target目录。

除了这个特定问题的范围之外,maven-reactor-plugin是Maven中最不透明的部分之一,但如果你掌握它,它也是最强大的部分之一。你会很好地阅读它。

希望有所帮助。