我们不需要指定我们使用的Maven依赖项和插件的版本和其他参数。我们只能在父POM中执行一次,也可以采用其他方式来继承子POM中的属性。
不幸的是,我遇到了很多项目,在这些项目中我无法轻易找到依赖项和插件的真实参数。即依赖项的版本为空,但是在父POM中没有与此有关的信息。
所以我的问题是:
在Maven中指定依赖项和插件参数的所有可能方法有哪些?即如果子POM的插件或父pom的插件管理中都没有版本号,我在哪里可以找到它?
是否有任何Maven命令来找出Maven从何处获取这些参数?例如,我可以使用dependency:tree
命令。它将打印一个依赖关系列表,这将有助于我了解所卡住的版本依赖关系。但这是一个hack,它无法帮助我使用插件。也许有更好的东西?
在执行任何命令之前,Maven会构建“有效的POM”,有关更多详细信息,请参见this stackoverflow answer。您可以通过运行mvn help:effective-pom
查看任何项目的有效POM。通常,当我运行此命令时,我会将输出重定向到文件中,以便可以在文本编辑器中查看和搜索它。
您询问了POM的特定部分,依赖关系和插件。您在正确的轨道上,maven-dependency-plugin帮助。我最常使用的目标是dependency:tree
,dependency:resolve
和dependency:resolve-plugins
。前两个帮助项目相关性,最后一个帮助插件。添加-U
选项以强制Maven更新依赖项,而不管update policies/repository metadata值如何。
在故障排除时从一个空的本地存储库开始也很有帮助。
最后但并非最不重要的一点,当构建使用没有特定版本的插件时,Maven会发出警告。始终指定一个明确的版本来修正警告并避免出现诸如this one之类的问题。