使用Maven中的scope总结

 更新时间:2022年06月15日 09:43:53   作者:野生开发者  
这篇文章主要介绍了使用Maven中的scope总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Maven中的scope总结

Maven中的scope主要有以下6种

接下来分别介绍下这几种scope:

  • compile

不声明scope元素的情况下的默认值;compile表示被依赖包需要参与当前项目的编译,包括后续的测试,运行周期也参与其中,是一个比较强的依赖;打包的时候通常需要包含进去。

  • provided

provided 类型的scope只会在项目的编译、测试阶段起作用;可以认为在目标容器中已经提供了这个依赖,无需在提供,但是在编写代码或者编译时可能会用到这个依赖;依赖不会被打入到项目jar包中。

说到provided,这里就要说到<dependency>下的子标签<optional> ,如果一个依赖的<optional> 设置为true,则该依赖在打包的时候不会被打进jar包,同时不会通过依赖传递传递到依赖该项目的工程;例如:x

依赖B,B由依赖于A(x->B->A),则A中设置<optional> 为true的依赖不会被传递到x中。

这两者的区别在于:

1、<optional>为true 表示某个依赖可选,该依赖是否使用都不会影响服务运行;

2、provided的<scope>在目标容器中已经提供了这个依赖,无需在提供

  • runtime

runtime与compile比较相似,区别在于runtime 跳过了编译阶段,打包的时候通常需要包含进去。

  • test

在一般的编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用,不会被打包到项目jar包中,同时如果项目A依赖于项目B,项目B中的test作用域下的依赖不会被继承。

  • system

表示使用本地系统路径下的jar包,需要和一个systemPath一起使用,如下:

<!--引用-->
        <dependency>
            <groupId>xxxx</groupId>
            <artifactId>xxx</artifactId>
            <systemPath>${basedir}/lib/xxxxx.jar</systemPath>
            <scope>system</scope>
            <version>1.4.12</version>
        </dependency>
  • import

import 只能在pom文件的<dependencyManagement>中使用,从而引入其他的pom文件中引入依赖,如:在Spring boot 项目的POM文件中,我们可以通过在POM文件中继承 Spring-boot-starter-parent来引

用Srping boot默认依赖的jar包,如下:

<!-- Inherit defaults from Spring Boot -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.BUILD-SNAPSHOT</version>
</parent>

但是,通过上面的parent继承的方法,只能继承一个 spring-boot-start-parent。实际开发中,用户很可能需要继承自己公司的标准parent配置,这个时候可以使用 scope=import 来实现多继承。代码如下:

     <dependencyManagement>
         <dependencies>
             <dependency>
                 <!-- Import dependency management from Spring Boot -->
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-dependencies</artifactId>
                 <version>2.0.1.BUILD-SNAPSHOT</version>
                 <type>pom</type>
                 <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

通过上面方式,就可以获取spring-boot-dependencies.2.0.1.BUILD-SNAPSHOT.pom文件中dependencyManagement配置的jar包依赖。如果要继承多个,可以在dependencyManagement中添加,如:

     <dependencyManagement>
         <dependencies>
             <!-- Override Spring Data release train provided by Spring Boot -->
             <dependency>
                 <groupId>org.springframework.data</groupId>
                 <artifactId>spring-data-releasetrain</artifactId>
                 <version>Fowler-SR2</version>
                 <type>pom</type>
                 <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.0.1.BUILD-SNAPSHOT</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

Maven中<scope>参数</scope>配置

参数名称具体功能
<scope>compile</scope>默认值,表示当前依赖包要参与当前项目的编译后续测试运行时打包
<scope>provided</scope>当前包只在编译和测试的时候使用,而不再后续的运行和打包的时候不会打包进来
<scope>test</scope>表示当前依赖包只参与测试工作
<scope>runtime</scope>表示当前依赖包只参与运行周期,其他跳过
<scope>system</scope>从参与度和provided一致,不过被依赖项不会从maven远程仓库下载,而是从本地的系统拿。需要systemPath属性来定义路径

解决maven项目中无法打包生成空文件夹的问题

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.1.1</version>
                <executions>
                    <!-- Run shade goal on package phase -->
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <artifactSet>
                                <excludes>
                                    <exclude>org.apache.flink:force-shading</exclude>
                                    <exclude>com.google.code.findbugs:jsr305</exclude>
                                    <exclude>org.slf4j:*</exclude>
                                    <exclude>org.apache.logging.log4j:*</exclude>
                                </excludes>
                            </artifactSet>
                            <filters>
                                <filter>
                                    <!-- Do not copy the signatures in the META-INF folder.
                                    Otherwise, this might cause SecurityExceptions when using the JAR. -->
                                    <artifact>*:*</artifact>
                                    <excludes>
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.lkr.flink.StreamingJob</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

相关文章

  • springcloud整合gateway实现网关全局过滤器功能

    springcloud整合gateway实现网关全局过滤器功能

    本文主要介绍了springcloud整合gateway实现网关全局过滤器功能,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Spring-Cloud Eureka注册中心实现高可用搭建

    Spring-Cloud Eureka注册中心实现高可用搭建

    这篇文章主要介绍了Spring-Cloud Eureka注册中心实现高可用搭建,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • SpringBoot+MyBatis-Plus实现分页示例

    SpringBoot+MyBatis-Plus实现分页示例

    本文介绍了SpringBoot+MyBatis-Plus实现分页示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12
  • Java创建数组、赋值的四种方式详解(声明+创建+初始化 )

    Java创建数组、赋值的四种方式详解(声明+创建+初始化 )

    数组是一种数据结构,用来存储同一类型值的集合一旦创建了数组,就不能再改变它的长度,下面这篇文章主要给大家介绍了关于Java创建数组、赋值的四种方式(声明+创建+初始化 )的相关资料,需要的朋友可以参考下
    2024-04-04
  • Java基于HttpClient实现RPC的示例

    Java基于HttpClient实现RPC的示例

    HttpClient可以实现使用Java代码完成标准HTTP请求及响应。本文主要介绍了Java基于HttpClient实现RPC,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • mybatis-plus之自动映射字段(typeHandler)的注意点及说明

    mybatis-plus之自动映射字段(typeHandler)的注意点及说明

    这篇文章主要介绍了mybatis-plus之自动映射字段(typeHandler)的注意点及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • 如何设计一个安全的API接口详解

    如何设计一个安全的API接口详解

    在日常开发中,总会接触到各种接口,前后端数据传输接口,第三方业务平台接口,下面这篇文章主要给大家介绍了关于如何设计一个安全的API接口的相关资料,需要的朋友可以参考下
    2021-08-08
  • springboot vue组件开发实现接口断言功能

    springboot vue组件开发实现接口断言功能

    这篇文章主要为大家介绍了springboot+vue组件开发实现接口断言功能,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • IntelliJ IDEA2020.3详细安装教程

    IntelliJ IDEA2020.3详细安装教程

    这篇文章主要介绍了IntelliJ IDEA2020.3详细安装教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Mybatis-Plus实现自定义SQL具体方法

    Mybatis-Plus实现自定义SQL具体方法

    Mybatis-Plus是Mybatis的一个增强工具,它可以优化我们的开发效率,这篇文章主要介绍了Mybatis-Plus实现自定义SQL,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2023-08-08

最新评论