当前位置: 首页 > 知识库问答 >
问题:

maven如何解决Spring data gefire的slf4j依赖关系?

汪臻
2023-03-14

Spring数据集1.7。0.0版本对1.7版具有编译时依赖性。slf4j api和jcl-over-slf4j中的12个。我在maven pom文件中定义了以下依赖项,因为我们需要slf4j 1.7。10依赖性(很少有其他jar依赖于此):

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-gemfire</artifactId>
    <version>1.7.0.RELEASE</version>
</dependency>   

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.10</version>
</dependency>

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>1.7.10</version>
    <scope>runtime</scope>
</dependency>

我有一个内部maven repo作为maven中央存储库。以下是我在不同场景中看到的行为,基于maven central中可用的JAR:

我的问题:

  1. 在场景1中,我不明白为什么构建没有抱怨缺少1.7。12罐。依赖关系是如何解决的

共有1个答案

衡建中
2023-03-14

答案基于Maven依赖调解机制,具体如下:

您总是可以通过在项目的POM中显式声明来保证版本

因此,本质上,通过显式地将其声明为依赖项的一部分,您将覆盖可传递依赖项上的任何版本,因此您不需要添加任何排除。你声明了,你知道这个项目,Maven信任你。

因此,在场景1和场景2中,Maven应用了上述规则,只是遵循POM中指定的规则
在场景1中,因为它没有找到任何1.7。12版本,它甚至没有尝试解决它,并且信任您的POM
在场景2中,它解析了1.7中的依赖关系树。12,但根据您的POM,版本1.7。10韩元
在场景3中,它无法解析版本1.7的整个依赖关系树。12,因此它给出了一个错误:是的,来自POM的版本无论如何都会赢,但是由于Maven在获取完整的依赖关系树时出错,因此执行失败。

这是一个特例,最终的确认只能通过查看您正在使用的Maven版本的相关代码来给出。

更新
我建议在这三个场景中尝试更多的细节,是从控制台运行:

mvn dependency:resolve -Dsort=true -X

由于debug标志,它将在依赖项中介过程中提供包含和排除的依赖项列表。

作为补充,运行:

mvn dependency:tree

将为您提供完整的依赖关系图,显示从POM中实际获取的内容以及通过传递依赖关系获得的内容。这可能会给你更多的信息。更多的细节,我建议看看Maven依赖插件的目标。

 类似资料:
  • 谁能告诉我Maven中的依赖项Hamcrest有什么问题吗?这是一个遗憾,但我不能在这里附上截图。 当我试图更新Maven索引时,什么也没有发生。

  • 我有一个相当大的遗留项目,我正在添加一个组件。此组件使用HtmlUnit。我可以用Maven编译它,但是当我运行它时,我得到: 所以它缺少正确的构造函数。我认为这几乎肯定是中的版本冲突,但我不确定如何解决它。下面是我的(请注意我一直尝试玩的排除和依赖关系管理的所有游戏): 有什么想法吗? 编辑:有人认为这个问题是这个问题的重复,但事实并非如此,因为本例中的依赖类型不是。

  • 我们有一个项目a依赖于项目B,项目B依赖于图书馆C。a和B是本地项目,而C是maven central repo的公共图书馆。 波姆。xml用于: 波姆。用于B的xml: 在A中运行mvn dependency:tree-Dverbose时,它不会解析B的依赖项,B中使用的此类依赖项也不会显示在A的Maven依赖项中。这对于编译很好,但在运行时会因为NoClassDefFound错误而失败。 有没

  • 我正在尝试解决我的eclipse项目中的maven依赖项。 依赖项已经下载到我的maven dependencies文件夹中(如下所示) 然而,import语句仍然没有解析。 在我的java构建路径中,存在Maven Dependencies文件夹。 到目前为止,我已经尝试在命令行上重建项目并在eclipse中刷新它;我尝试在eclipse中重建它;我尝试在eclipse中更新项目。 似乎什么都没

  • 在项目A中,我有POJO和DAO。在项目B中,所有的业务规则、控制器、sping配置等等。 我已经按照这里的建议成功地将项目A链接到B。 src/main/webapp/web-inf/spring/smartquality-datasource.xml是: src/main/webapp/web-inf/spring/smartqualite-security.xml是: serc/main/w

  • 当我尝试运行mvn sonar时:sonar target maven无法运行sonar,以下是mvn输出的相关部分: org.apache.maven.shared.dependency.tree.依赖 似乎出于某种原因,maven没有下载所需的依赖项。 我配置了一个包含jar的本地nexus,但是不管我的设置中是否有激活的配置文件,我都会得到相同的结果。xml与否。 我应该如何配置maven,