java – Maven安装传递依赖项

我有一个项目,我需要在Maven上安装一个库,以便我可以在所述项目上使用它.我遇到的问题是所说的库,比如说libA,它本身就有一个依赖,libB,它也是第三方的.

我已使用此代码将两者添加到本地存储库:

mvn install:install-file -Dfile=VerBDConverter.jar -DgroupId=verbdconverter
-DartifactId=verbdconverter -Dversion=1.00 -Dpackaging=jar -DgeneratePom=true  

对于lib 2也是如此.问题是,当我转到我的项目的pom并添加<依赖>对于libA,Maven没有拿起libB.

问题:毕竟Maven应该得到libA的依赖,但事实并非如此.

最佳答案

It should be, after all, Maven should get libA’s dependencies, but it didn’t.

不,在你的情况下,Maven不会明白libA需要哪些传递依赖,因为libA是手动安装的,并且在任何地方都没有libB的痕迹.

通常,传递依赖项是.pom文件的依赖项部分中定义的依赖项,可作为已部署应用程序的一部分使用. .pom文件本质上是原始pom.xml文件的副本,重命名以反映库名称(即artifactId-version.jar,然后是artifactId-version.pom).

在解析依赖关系时,maven还会检查其.pom文件,并因此获取有关其依赖关系的信息(这将成为传递依赖关系)并为其构建(和获取)所需的依赖关系图(即,重新迭代相同的进程每一个声明的依赖).

从官方Maven – Introduction to the dependency mechanism

This feature is facilitated by reading the project files of your dependencies from the remote repositories specified. In general, all dependencies of those projects are used in your project, as are any that the project inherits from its parents, or from its dependencies, and so on.

注意:大胆是我的.项目文件通常是pom.xml文件,一旦相关工件上传到Maven存储库(或安装到本地Maven缓存中),就会重命名为* .pom文件.

从你的问题,你使用-DgeneratePom = true,因此你没有传递libA’pom.xml文件,但是一个新文件是automatically generated

Generate a minimal POM for the artifact if none is supplied via the parameter pomFile. Defaults to true if there is no existing POM in the local repository yet.

自动生成的.pom文件几乎为空(Maven坐标(groupId,artifactId,版本)但其中没有依赖项部分),因此Maven会将libA视为没有传递依赖的库:它找不到任何内容,也无法猜测.

因此,您有四种解决方案(按推荐顺序):

>在企业环境中,设置enterprise Maven repository(如Arifactory,Nexus或Apache Archivia)并将这些库正确部署到其中,或者
>使用pomFile选项重新安装libA,或
>手动将依赖项部分添加到生成的.pom文件中,并将libB添加到其中,或者
>在您的使用者pom.xml文件中明确声明libB

有关SO的进一步阅读:

> Why Maven is looking for .pom file when .jar is present in the repository?

转载注明原文:java – Maven安装传递依赖项 - 代码日志