【问题标题】:Maven install transitive dependenciesMaven 安装传递依赖
【发布时间】:2016-04-11 21:36:07
【问题描述】:

我有一个项目,我需要在 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的依赖,但它没有。

【问题讨论】:

  • 如果您专门列出您对这个问题的依赖项的名称可能会有所帮助,以防它类似于this 继续......我们通常需要能够重现该问题才能帮助。
  • @andrew,谢谢,我没有包括这两个库名称的原因是因为它们是由我自己的公司创建的,因此在 Maven 存储库中不可用。
  • 由于这是在公司环境中,您应该考虑设置一个工件存储库(如 Artifactory 或 Nexus)来托管您公司的自定义库。

标签: java eclipse maven maven-install-plugin


【解决方案1】:

应该是,毕竟Maven应该得到libA的依赖,但它没有。

不,在您的情况下,Maven 不会突然知道 libA 需要哪些传递依赖项,因为 libA 是手动安装的,并且任何地方都没有 libB 的踪迹。

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

当解析一个依赖时,maven 也会检查它的.pom 文件,并因此获取关于它的依赖的信息(它成为传递依赖)并为它构建(和获取)所需的依赖图(即重新迭代每个声明的依赖项都使用相同的过程。

来自官方Maven - Introduction to the dependency mechanism

通过从指定的远程存储库中读取您的依赖项的项目文件,可以促进此功能。一般来说,这些项目的所有依赖项都在您的项目中使用,项目从其父项或从其依赖项继承的任何依赖项等等。

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


根据您的问题,您使用了-DgeneratePom=true,因此您没有传递 libA' pom.xml 文件,但一个新文件是 automatically generated

如果没有通过参数pomFile 提供,则为工件生成最小 POM。如果本地存储库中还没有现有的 POM,则默认为 true

自动生成的.pom 文件几乎是空的(Maven 坐标(groupId, artifactId, version)但没有dependencies 部分),因此 Maven 将 libA 视为没有传递依赖的库:它找不到任何,它也猜不到。


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

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

进一步阅读 SO:

【讨论】:

    【解决方案2】:

    这可能会对您有所帮助:

    call mvn install:install-file -Dfile=sqljdbc.jar -DgroupId=com.microsoft.jdbc -DartifactId=sqljdbc1 -Dversion=1.0 -Dpackaging=jar
    call mvn install:install-file -Dfile=sqljdbc4.jar -DgroupId=com.microsoft.jdbc -DartifactId=sqljdbc4 -Dversion=4.0 -Dpackaging=jar
    call mvn install:install-file -Dfile=sqljdbc41.jar -DgroupId=com.microsoft.jdbc -DartifactId=sqljdbc41 -Dversion=4.1 -Dpackaging=jar
    

    来源:https://github.com/Programmercito/osbo-framework/blob/master/libs/instala.bat

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-06
      • 2019-04-06
      • 2013-02-17
      • 2019-08-23
      • 2019-10-29
      • 1970-01-01
      • 2021-10-24
      相关资源
      最近更新 更多