在使用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则只包含当前目录

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐