在使用maven进行依赖管理的项目中,想要导入第三方的jar包,除了将jar包上传到maven库中,还可以使用
<scope>system</scope>加上jar包的路径进行导入
但这种方法导入的jar包,在打包时不会被包含进去,这是由scope的属性决定的
provided:打包的时候可以不用包进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是打包阶段做了exclude操作。
system:从参与度来说,和provided相同,不过被依赖项不会从maven仓库下载,而是从本地文件系统拿。需要添加systemPath的属性来定义路径。
system和provided一样,表示项目打包的时候不包含,如果想要包含,jar包打包和war包的方式不同
对于jar包
maven插件spring-boot-maven-plugin中添加配置<includeSystemScope>true</includeSystemScope>配置,表示包含SystemScope中的依赖
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
</plugins>
</build>
对于war包
war包打包后会生成一个WEB-INF/lib-provided的文件夹,scope=system依赖的jar包都在这里面,因此无法生效,因为tomcat是读取WEB-INF/lib里的jar包
添加maven-war-plugin插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webResources>
<resource>
<directory>src/main/resources/lib</directory>
<targetPath>WEB-INF/lib/</targetPath>
<includes>
<include>**/*.jar</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
<directory>src/main/resources/lib</directory>代表本地jar包的目录
<targetPath>WEB-INF/lib/</targetPath>代表想要打包到的路径
<includes> <include>**/*.jar</include> </includes>是jar包的过滤器,**/*.jar代表包含子目录下的所有jar包,如果*.jar则只包含当前目录