(如果为了快速理解,直接看文档最后的举例。)
我们不妨先看下官方文档:Dependency_Scope,关于import的说明如下:

速读一遍,云里雾里的,下面一句一句来读。
This scope is only supported on a dependency of type pom in the <dependencyManagement> section.
这个scope(指import)仅仅在<dependencyManagement>内部定义的pom<dependency>中支持。
换成中文语序是
只在<dependencyManagement>内定义的<dependency>中支持import这一scope。
下面是第二句
It indicates the dependency is to be replaced with the effective list of dependencies in the specified POM's <dependencyManagement> section.
它表示,在当前这个pom文件的<dependencyManagement>内定义的<dependency>会被替换成一些系列的<dependency>。
第二句已经是调整过语序后的,还能大概理解。下面第三句
Since they are replaced, dependencies with a scope of import do not actually participate in limiting the transitivity of a dependency.
由于他们是被替换的,所以这些被import的scope所导入dependency不会受限依赖继承策略。
第三句提到了依赖继承,但又无需明白依赖继承。因为上面的意思是说,这些dependency可以等价于直接在当前pom文件中定义的,而不是从父项目继承来的。
举个例子
项目A和项目B的pom.xml文件中都定义了<dependencyManagement>,同时在B的<dependencyManagement>中定义<dependency>指向A,且scope为import:
这是project-B的pom.xml
<dependencyManagement>
<dependencies>
<dependency>
<groupId>project-A</groupId>
<artifactId>project-A</artifactId>
<version>1.0</version>
<scope>import</scope>
</dependency>
...
</dependencies>
</dependencyManagement>
这就相当于将A中定义的所有<dependencies>全部复制粘贴到了项目B的pom.xml中。由于是“复制粘贴”,所以不是继承关系。就这个意思。
另外,一个小tip,如果在B中要对A中定义的dependency覆盖,应该注意顺序,将对A的依赖写在下面。
这是project-B的pom.xml
<dependencyManagement>
<dependencies>
<!-- 注意写到对项目A依赖的前面 -->
<dependency>
<groupId>some</groupId>
<artifactId>some</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>project-A</groupId>
<artifactId>project-A</artifactId>
<version>1.0</version>
<scope>import</scope>
</dependency>
...
</dependencies>
</dependencyManagement>
本文详细解释了Maven中dependency的import scope,指出它仅在<dependencyManagement>内部有效,用于将其他项目的依赖管理引入当前项目,相当于直接复制依赖。通过例子展示了如何使用import scope,以及如何覆盖导入的依赖。理解import scope有助于更好地管理和组织项目依赖。

1155

被折叠的 条评论
为什么被折叠?



