根据Maven lifecycle,mvn install
将“将软件包安装到本地存储库中,以用作本地其他项目的依赖项”。然后,本地存储库存储我远程下载的所有jar。
我的模块与其他模块有依赖关系。当我运行mvn package
时,我的本地存储库中没有存储任何内容,但依赖项似乎已经完成。那么Maven如何处理模块间的依赖关系呢? Maven是从构建的目标目录中引用每个模块的jar还是从其他位置获取它们?
答案 0 :(得分:1)
这取决于您正在执行的阶段。在compile
之前,Maven将失败,因为没有编译的类。在compile
和package
之间,使用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中最不透明的部分之一,但如果你掌握它,它也是最强大的部分之一。你会很好地阅读它。
希望有所帮助。