java - 导入maven依赖

标签 java maven dependencies pom.xml

我有 2 个与此主题相关的问题。我想将以下依赖项导入到我的项目中:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>${jackson.version}</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>${jackson.version}</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>${jackson.version}</version>
</dependency>

这是我的两个问题

  1. 有没有办法通过 1 个导入语句导入所有 3 个?它们都具有相同的 groupId,而这 3 个是该 groupId 中唯一的。那么我是否可以忽略 artifactId 而只导入 groupId 中的所有内容?
  2. Springboot 似乎导入了这些 jackson 库,但是是旧版本 (2.6.5)。当我放置这些依赖项 (2.7.3) 时,是否会覆盖 springboot 依赖项?

最佳答案

1。相同 groupId 的较小重要声明

据我所知,无法使用一个导入语句导入所有三个 Artifact ,即使它们使用相同的 groupId。但是,您通过使用变量来确保版本完全相同来做正确的事情。如果您看到不同依赖项的版本号冲突,这会有所帮助,这会导致下一个答案...

2。解决依赖冲突

不完全是。这两个依赖项都将包含在您的类路径中,这可能会在以后导致冲突(或者由于 Java 首先找到旧版本而无法解决来自较新版本的功能的问题)。有两种处理方法。一种是使用 Maven Dependency用于搜索不确定情况下可能发生的冲突的插件。然后一旦你理解了冲突(就像 Springboot 和你的软件的情况一样),你就可以排除特定的依赖项被 Springboot 引入,从而导致你的版本成为所有其他依赖项使用的版本。您可以通过在声明 Springboot 依赖项时添加排除项来做到这一点:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>${springboot.version}</version>
        <exclusions>
            <exclusion>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
            </exclusion>
            <exclusion>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
            </exclusion>
            <exclusion>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

编辑: 正如 khmarbaise 提到的,根据 Maven's documentation在这件事上,与您的项目“最近”的依赖项(即在您的 pom 中声明而不是依赖项的 pom)将首先被您的程序使用,因此您不必排除 Artifact 。但是,我还没有发现这在实践中总是有效(或者可能发生了其他事情)。排除在另一种情况下很有用,在这种情况下,您正在创建一个包含所有依赖项的阴影 Jar,并且您不想包含同一版本的多个版本。

关于java - 导入maven依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36339826/

相关文章:

java - Maven、Subversion、Javadocs

Grails在jar中找不到类

go - godep save./…给出一个错误-Godep:无法找到软件包的SrcRoot

java - 如何在 Maven 的本地项目中安装依赖项?

java - 在 Morphia createQuery 方法中传递集合名称是一个好习惯吗?

java - 如何正确使用hybris1905的服务?

java - Maven 中的 SOAPUI 测试报告

java - 如何正确地将资源添加到我的 java 项目中,以便它们可供构建的实例使用?

java - 将字符添加到 BufferedReader

java - Ant复制任务: Copying all only src folder (including subdirectories ) under each Project to single directory