导入maven依赖项

时间:2016-03-31 17:23:31

标签: 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>

以下是我的2个问题

  1. 有没有办法导入包含1个import语句的所有3个?它们都具有相同的groupId,并且那3个是该groupId中唯一的。那么我可以省略artifactId并只导入groupId中的所有内容吗?
  2. Springboot似乎导入了这些jackson库,但旧版本(2.6.5)。当我把这些依赖项(2.7.3)覆盖springboot依赖项?

1 个答案:

答案 0 :(得分:4)

1。同一groupId

的较小重要语句

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

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关于此事,依赖关系是&#34;最近的&#34;对于您的项目(即在您的pom中声明而不是依赖项的pom),将首先由您的程序使用,因此您不必排除工件。但是,我还没有发现这总是在实践中工作(或者可能还有其他事情发生)。在您创建带有所有依赖关系的阴影Jar的其他情况下,排除很有用,并且您不希望包含同一个版本的多个版本。