依赖<dependency>的scope了解

maven项目,添加依赖的时候,<dependency>内会有scope选项,默认是compile。

网上也有不少介绍,有一个<import>没看明白,专门试了下,记录如下。

新建项目testd为pom类型。再建子模块,但是不依赖testd这个项目(即父项目不指定),对应pom如下:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>normal</groupId>
  <artifactId>testd</artifactId>
  <version>1.0-SNAPSHOT</version>
  <name>testd</name>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

</project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!--    <parent>-->
<!--        <artifactId>testd</artifactId>-->
<!--        <groupId>normal</groupId>-->
<!--        <version>1.0-SNAPSHOT</version>-->
<!--    </parent>-->
    <modelVersion>4.0.0</modelVersion>

    <artifactId>testson1</artifactId>
    <groupId>normal</groupId>
    <version>1.0-SNAPSHOT</version>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>normal</groupId>
                <artifactId>testd</artifactId>
                <version>1.0-SNAPSHOT</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
    </dependencies>
</project>

testson1里测试junit是否可以使用,比较简单,就是判断@Test是否可以导入,代码如下:

public class SampleTest {

    @Test
    public void testDependency() {
    }
}

个人理解总结:使用<scope>import</scope>这个范围限制,可以在不继承父项目的情况下,使用指定项目的特定依赖(改部分依赖是pom项目里指定版本的,可以理解是特殊管理的jar类型)

原文地址:https://www.cnblogs.com/havenenjoy/p/12974612.html