使用Maven中的scope属性可以控制依赖关系的传递范围。scope有以下属性值:
- compile
依赖于当前项目的compile周期,该依赖会一直对所有周期都有效。默认值。
- provided
只在编译和测试classpath中有用,但运行时不在classpath中。例如,servlet-api依赖可以设置为provided。在打包时不会将依赖项打入输出文件中。
- runtime
运行和测试时需要,编译时不需要。
- test
仅在测试时使用。不参与编译、打包等工作。
- system
与provided类似,但是需要显式地提供文件路径。建议不要使用该属性。
下面是两个示例:
1. 将依赖设置为compile
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>29.0-jre</version>
<scope>compile</scope>
</dependency>
</dependencies>
上面的代码将Guava库作为compile级别的依赖项引入。compile级别的依赖项会一直有效,包括编译、测试和运行时。
2. 将依赖设置为provided
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
上面的代码将Servlet API作为provided级别的依赖项引入。provided级别的依赖项只在编译和测试classpath中有用,但在运行时不在classpath中。因此,在打包时不会将依赖项打入输出文件中。
总结:使用scope属性可以控制依赖关系的传递范围,可根据不同的需要进行设置,避免不必要的依赖传递。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Maven中的scope总结 - Python技术站