返回顶部
首页 > 资讯 > 后端开发 > Python >使用Maven中的scope总结
  • 710
分享到

使用Maven中的scope总结

2024-04-02 19:04:59 710人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录Maven中的scope总结Maven中的scope主要有以下6种Maven中<scope>参数</scope>配置解决maven项目中无法打包生成空文件夹的问题Maven中的s

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>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。 

--结束END--

本文标题: 使用Maven中的scope总结

本文链接: https://lsjlt.com/news/151508.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用Maven中的scope总结
    目录Maven中的scope总结Maven中的scope主要有以下6种Maven中<scope>参数</scope>配置解决maven项目中无法打包生成空文件夹的问题Maven中的s...
    99+
    2024-04-02
  • Maven依赖中scope的含义
    scope元素的作用:控制 dependency 元素的使用范围。通俗的讲,就是控制 jar 包在哪些范围被加载和使用。 scope具体含义如下: compile(默认)含义:com...
    99+
    2023-01-15
    Maven scope
  • Maven项目中resources配置总结
    目录背景第一部分 基本配置介绍第二部分 具体配置和注意事项2.1 案例说明2.2 正则过滤2.3 变量占位符2.5 子目录第二部分 读取resources资源背景 通常Maven项目...
    99+
    2024-04-02
  • Spring框架开发scope作用域分析总结
    目录1.scope 作用域2.Idea中默认为singleton1.scope 作用域 Spring 管理的 bean 是根据 scope 来⽣成的,表示 bean 的...
    99+
    2024-04-02
  • 使用Spring中的scope配置和@scope注解
    目录Spring的scope配置和@scope注解1. Spring的作用域在装配Bean2. 基于注解开发时Spring中的scope详解1. scope概论2...
    99+
    2024-04-02
  • 如何使用Spring中的scope配置和@scope注解
    本文小编为大家详细介绍“如何使用Spring中的scope配置和@scope注解”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何使用Spring中的scope配置和@scope注解”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-07-02
  • Mybatis中resultMap的使用总结
    Mybatis的介绍以及使用:http://www.mybatis.org/mybatis-3/zh/index.html resultMap是Mybatis最强大的元素,它可以将查...
    99+
    2024-04-02
  • C++中引用的使用总结
    1引用的定义 引用时C++对C的一个重要的扩充,引用的作用是给变量起一个别名。 例如: int a; int &b=a;//声明b是a的引用 经过以上的声明,b就成为了a的别...
    99+
    2022-11-15
    引用 C++
  • Vue 中插槽的使用总结
    目录默认插槽具名插槽作用域插槽插槽总结默认插槽 首先做一个页面: 新增 Category.vue <template> <div class="category"...
    99+
    2024-04-02
  • Shell中的变量使用总结
    本篇内容主要讲解“Shell中的变量使用总结”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Shell中的变量使用总结”吧!变量的定义,只能以字母和下划线开始,区分大小写,可以包含数字 字母下划线...
    99+
    2023-06-09
  • idea中的Maven导包失败问题解决总结
    idea中的Maven导包失败问题解决总结 先确定idea和Maven 的配置文件settings 没有问题 找到我们本地的maven仓库,默认的maven仓库路径是在\C:\Users\用户名.m2...
    99+
    2023-09-06
    intellij-idea maven java
  • 基于Maven pom文件中属性变量总结
    目录Maven pom文件属性变量总结1.内置属性2.POM属性 3.自定义属性Maven pom变量定义定义变量并赋值 Maven pom文件属性变量总结 1.内置属性 ...
    99+
    2024-04-02
  • Django中外键使用总结
    目录了解外键使用外键在同一个app中使用外键外间删除操作的参数意思:在写项目的过程中我们不可避免的会使用到外键这个东西,那么Django中是怎样来使用外键的呢? 了解外键 在MySQ...
    99+
    2024-04-02
  • Modbus在Java中使用总结
    一、什么是Modbus Modbus是一种串行通信协议,是Modicon公司于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus是工业领域通信协议的业界标准,是工业电子设备之间常用的连接方式Modbus就是...
    99+
    2023-09-13
    网络 modbus java Modbus Poll Netty
  • 总结Python使用过程中的bug
    Python使用过程中的bug 问题: 在vscode中, 使用 Windows PowerShell 运行 conda activate xxx (某个环境)切换环境时报错: ...
    99+
    2024-04-02
  • Python 中enum的使用方法总结
    目录1.为什么要用enum,什么时候使用enum2.enum的定义/声明3.遍历成员4.继承Enum的类中定义方法5.将Enum类属性的值定义为函数或方法6.自定义异常处理7.enu...
    99+
    2024-04-02
  • redis 使用总结
    最近一段时间与redis接触比较频繁。发现有些东西还是工作中经常会用到的,自己也花了点时间巩固下。本篇文章主要是以总结性的方式梳理,因为redis的主题很大,任何一个技术点展开都是几篇文章的量。也可以说这篇...
    99+
    2024-04-02
  • BigDecimal使用总结
    对于超过16位的大型数字,需要用到Java在java.math包中提供的API类BigDecimal,而且也不是传统的+-*/,而是调用对应的方法。 1.创建对象 使用new的方式创建BigDecim...
    99+
    2023-09-03
    java BigDecimal
  • w3m使用总结
    ...
    99+
    2023-01-31
    w3m
  • sqlite3使用总结
           OS X自从10.4后把SQLite这套相当出名的数据库软件,放进了作业系统工具集里。OS X包装的是第三版的SQLite,又称SQLite3。这套软件有几个特色:软件属于公共财(public domain),SQLite可说...
    99+
    2023-01-31
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作