maven中的scope与systemPath用法

 更新时间:2023年11月13日 16:45:17   作者:代码没写完哪有脸睡觉  
这篇文章主要介绍了maven中的scope与systemPath用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

maven中的scope与systemPath

scope的分类包括以下

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

2.test 表示依赖项目仅仅参与测试相关的工作,包括测试代码的编译,执行。比较典型的如junit

3.runtime 表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过编译而已。在终端的项目(非开源,企业内部系统)中,和compile区别不是很大。比较常见的如JSRXXX的实现,对应的API jar是compile,具体实现是runtime的,compile只需要知道接口就足够了。oracle jdbc驱动jar包就是一个很好的例子,一般scope为runtime。 另runtime的依赖通常和optional搭配使用,optional为true。即可以用A实现也可以用B实现。

4.procided 意味着打包的时候可以不用包进去,别的设施(web container)会提供。事实上该依赖理论上可以参与编译、测试、运行等周期。相当于compile,但是打包阶段做了exclude的动作。

5.system 和provide相同,不过被依赖项不会从maven仓库抓,而是从本地系统文件拿,一定要配合systemPath使用

systemPath

当maven依赖本地而非repository中的jar包,systemPath指明本地jar包路径

参考:

<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-core</artifactId>
    <version>1.5</version>
    <scope>system</scope>
    <systemPath>${basedir}/WebContent/WEB-INF/lib/hamcrest-core-1.3.jar</systemPath>
</dependency>

maven scope=system,打包打不进

maven配置

<dependency>
            <groupId>xxxx.bigdata</groupId>
            <artifactId>data-stream-submit</artifactId>
            <version>2.0.0.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.yaml</groupId>
                    <artifactId>snakeyaml</artifactId>
                </exclusion>
            </exclusions>
            <scope>system</scope>
            <systemPath>${basedir}/../lib/data-stream-submit-2.0.0.0.jar</systemPath>
        </dependency>

maven install lib 没有data-stream-submit 包

解决方案

<build>
        <finalName>data-integration</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                    // 添加
                    <includeSystemScope>true</includeSystemScope>
                </configuration>
            </plugin>
        </plugins>

总结

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

相关文章

  • Java使用Deque实现堆栈的方法

    Java使用Deque实现堆栈的方法

    这篇文章主要介绍了Java使用Deque实现堆栈的方法,实例分析了java简单实现堆栈的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • java objectUtils 使用可能会出现的问题

    java objectUtils 使用可能会出现的问题

    这篇文章主要介绍了java objectUtils 使用可能会出现的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Spring Cloud之注册中心Nacos的使用详解

    Spring Cloud之注册中心Nacos的使用详解

    本文介绍SpringCloud Alibaba中的Nacos组件,对比了Nacos与Eureka的区别,展示了如何在项目中引入SpringCloud Alibaba和Nacos,并配置负载均衡,通过实际操作,验证了服务注册和负载均衡的功能,感兴趣的朋友一起看看吧
    2025-03-03
  • Java中一些基础概念的使用详解

    Java中一些基础概念的使用详解

    本篇文章是对在Java中一些基础概念的使用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Java GUI进阶之流式布局管理器FlowLayout专项精讲

    Java GUI进阶之流式布局管理器FlowLayout专项精讲

    FlowLayout-流式布局管理器,按水平方向依次排列放置组件,排满一行,换下一行继续排列。排列方向(左到右 或 右到左)取决于容器的componentOrientation属性
    2022-04-04
  • Java基础之打印万年历的简单实现(案例)

    Java基础之打印万年历的简单实现(案例)

    下面小编就为大家带来一篇Java基础之打印万年历的简单实现(案例)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • 详解Java中Callable和Future的区别

    详解Java中Callable和Future的区别

    这篇文章主要介绍了Java中Callable和Future的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-11-11
  • 如何提高java代码的重用性

    如何提高java代码的重用性

    在本篇文章中小编给各位分享了关于如何提高java代码的重用性的相关知识点内容,有需要的朋友们参考下。
    2019-07-07
  • java动态加载插件化编程详解

    java动态加载插件化编程详解

    这篇文章主要介绍了java动态加载插件化编程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • SpringBoot中的声明式事务详解

    SpringBoot中的声明式事务详解

    这篇文章主要介绍了SpringBoot中的声明式事务详解,Spring采用统一的机制来处理不同的数据访问技术的事务, Spring的事务提供一个PlatformTransactionManager的接口,不同的数据访问技术使用不同的接口实现,需要的朋友可以参考下
    2023-08-08

最新评论