(如果为了快速理解,直接看文档最后的举例。)
我们不妨先看下官方文档: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>