1、maven依赖中scope的值:provided和compile,他们的区别是什么?
provided:provided表明该包只在编译和测试的时候用,如果目标容器中包含了,则使用目标容器里的包
compile:默认值,项目在编译,测试,运行阶段都需要这个包,如果目标容器中也包含,则可能出现冲突问题
- compile:默认的scope,表示 dependency 都可以在生命周期中使用。
而且,这些dependencies 会传递到依赖的项目中。适用于所有阶段,会随着项目一起发布 - provided:跟compile相似,但是表明了dependency 由JDK或者容器提供,例如Servlet AP和一些Java EE APIs。这个scope 只能作用在编译和测试时,同时没有传递性,即:child module无法引用。
- runtime:不作用在编译时,但会作用在运行和测试时,如JDBC驱动,适用运行和测试阶段,与provided相反。
- test: 只在测试时使用,不作用在运行时,用于编译和运行测试代码。不会随项目发布。
- system:跟provided 相似,但是在系统中要以外部JAR包的形式提供,maven不会在repository查找它。
2、引入外部jar包
- pom文件加入systemPath配置,指向本地路径,一般使用${pom.basedir}(pom文件路径)的相对路径,这样通过GitLab自动构建也能找到jar文件的路径。
<dependency>
<groupId>tc</groupId>
<artifactId>cas-client-core</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${pom.basedir}/lib/tc/cas-client-core-3.3.3.jar</systemPath>
</dependency>
- 声明打包的时候需要加上本地jar路径
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
</plugins>
</build>
爱家人,爱生活,爱设计,爱编程,拥抱精彩人生!