我有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个问题
答案 0 :(得分:4)
据我所知,即使它们使用相同的groupId,也无法使用一个import语句导入所有三个工件。但是,您通过使用变量来确保版本完全相同,从而做正确的事情。如果您看到不同依赖项的版本号冲突,这会有所帮助,这将导致下一个答案......
不完全是。这两个依赖项都将包含在您的类路径中,这可能会导致以后发生冲突(或者由于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的其他情况下,排除很有用,并且您不希望包含同一个版本的多个版本。