spring项目(springmvc)(多模块/单模块)maven打包引入第三方jar方式,使用scope:system配置systemPath编译,不用添加到本地仓库!

注:此方式只适用于springmvc项目,springboot项目不可用!

若是springboot项目可参考:https://www.cnblogs.com/007sx/p/12442386.html

完整的引入三方jar包含2部分,缺一不可,
第一部分为编写代码阶段,编译时引用!
第二部分为打包成war阶段,运行时引用!

示例(多模块项目,单模块同理,以下也有说明!):

第一部分(编译调试时使用):

目录结构以及jar所在目录如下:

spring项目(springmvc)(多模块/单模块)maven打包引入第三方jar方式,使用scope:system配置systemPath编译,不用添加到本地仓库!

pom.xml中:

spring项目(springmvc)(多模块/单模块)maven打包引入第三方jar方式,使用scope:system配置systemPath编译,不用添加到本地仓库!
<dependency>
    <groupId>com.testgroupId>
    <artifactId>testjarartifactId>
    <version>0.0.1version>
    <scope>systemscope>
    <systemPath>${basedir}/src/main/resources/lib/test.jarsystemPath>
dependency>

第二部分(打包时使用):

pom.xml(其它模块)中:

spring项目(springmvc)(多模块/单模块)maven打包引入第三方jar方式,使用scope:system配置systemPath编译,不用添加到本地仓库!
<build>
    <finalName>${project.artifactId}finalName>
    <plugins>

        <plugin>
            <artifactId>maven-war-pluginartifactId>
            <version>3.2.0version>
            <configuration>
                <webResources>
                    <resource>

                        <directory>../cashloan-component/src/main/resources/libdirectory>
                        <targetPath>WEB-INF/libtargetPath>
                        <includes>
                            <include>**/*.jarinclude>
                        includes>
                    resource>
                webResources>
            configuration>
        plugin>
    plugins>
build>

说明:由于此pom.xml是子模块的,所以引入其它模块下的jar需要../xxx形式,如果是单模块项目,直接${basedir}/xxx即可!

最后打包的效果:

spring项目(springmvc)(多模块/单模块)maven打包引入第三方jar方式,使用scope:system配置systemPath编译,不用添加到本地仓库!

spring项目(springmvc)(多模块/单模块)maven打包引入第三方jar方式,使用scope:system配置systemPath编译,不用添加到本地仓库!

target/xxx/WEB-INF/lib/test.jar 存在即可!

完成这步骤代码即可正常构建运行和打包部署!

注:目前存在的问题,打包之后会在classes目录下target/xxx/WEB-INF/classes或者target/classes目录下多出来一个lib(示例中resources下目录命名为lib)目录里面存放的是三方jar,这个jar在项目运行中是用不到的,所以浪费了传输war包的时间!还没找到很好的解决方案,希望多多评论交流!

(已解决!)

方案分为单模块和多模块。

  1. 单模块pom.xml:只需在war打包插件中排除即可,如:

spring项目(springmvc)(多模块/单模块)maven打包引入第三方jar方式,使用scope:system配置systemPath编译,不用添加到本地仓库!
<packagingExcludes>WEB-INF/classes/lib/*.jarpackagingExcludes>
  1. 多模块的被依赖模块pom.xml中(即最终打成jar的模块):

spring项目(springmvc)(多模块/单模块)maven打包引入第三方jar方式,使用scope:system配置systemPath编译,不用添加到本地仓库!
<build>
    <resources>
        <resource>
            <directory>src/main/resourcesdirectory>
            <filtering>falsefiltering>
            <excludes>
                <exclude>lib/*.jarexclude>
            excludes>
        resource>
    resources>
build>

当然,多模块时,2种方式都加上也可以,一劳永逸!

Original: https://www.cnblogs.com/007sx/p/12439620.html
Author: 007少侠
Title: spring项目(springmvc)(多模块/单模块)maven打包引入第三方jar方式,使用scope:system配置systemPath编译,不用添加到本地仓库!

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/541576/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 标识符命名、instanceof 、自动装箱与拆箱、java关键字

    标识符的命名规则 标识符的含义: 是指在程序中,我们自己定义的内容,譬如, 类的名字, 方法名称以及 变量名称等等,都是标识符。 命名规则:(硬性要求) 标识符可以包含英文字母,0…

    Java 2023年6月13日
    097
  • SpringBoot学习(九)使用JTA的分布式事务、Hazelcast、Quartz调度器和任务执行和调度

    一、使用JTA的分布式事务 通过使用Atomikos或Bitronix嵌入式事务管理器,Spring Boot支持跨多个XA资源的分布式JTA事务。在部署到适当的Java EE应用…

    Java 2023年5月30日
    076
  • Java 8 Collectors.collectingAndThen()

    JDK源码 java.util.stream.Collectors#collectingAndThen方法的作用是将Collector的结果在执行一个额外的finisher转换操作…

    Java 2023年5月29日
    091
  • 面试突击69:TCP 可靠吗?为什么?

    相比于 UDP 来说,TCP 的主要特性是三个:有连接、可靠、面向数据流。所谓的”有连接”指的是 TCP 中的连接管理机制,也就是著名的三次握手和四次挥手,…

    Java 2023年5月29日
    089
  • 部署-gitlab克隆地址踩坑

    gitlab克隆地址踩坑 gitlab中的web界面的默认端口是80,ssh端口为22端口。而一般情况下,我们的服务器或者本地电脑 已经占用了这俩个端口,那么我们就需要进行端口映射…

    Java 2023年6月7日
    0100
  • Springboot限流工具之CurrentLimiting

    1.工具简介 CurrentLimiting:基于令牌桶算法和漏桶算法实现的纳秒级分布式无锁限流插件,完美嵌入SpringBoot、SpringCloud应用,支持接口限流、方法限…

    Java 2023年5月30日
    092
  • MySQL表历史数据清理总结

    最近工作中在处理线上几个数据表的清理工作,工作虽然简单,但操作起来注意的地方还是挺多的。现将整个过程进行简单的总结,以便作为日后的参考。 首先确定下我们清理数据的期望: 期望清理过…

    Java 2023年6月5日
    0128
  • Mybatis-plus的自定义分页搭配sql Server数据库使用

    原文出处:mybatisplus查询分页并且排序报错解决方法,适用于自定义sql和sqlserver_十七梦的博客-CSDN博客 一开始使用过的是官方文档来写分页,结果出现了如果不…

    Java 2023年6月6日
    0104
  • 企业级Nginx负载均衡与keepalived高可用实战(二)keepalived篇

    1、Keepalived高可用软件 1.1、Keepalived介绍 Keepalived软件起初是专门为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态…

    Java 2023年5月30日
    068
  • 虚拟机Failed to start LSB: Bring up/down networking

    1、执行 service network restart 出现以下错误 Restarting network (via systemctl): Job for network.se…

    Java 2023年5月30日
    074
  • SpringBoot使用Redis教程(共5步)

    SpringBoot使用Redis教程 &#x5E94;&#x7528;&#x73AF;&#x5883;: &#x5B58;&#x6…

    Java 2023年6月16日
    098
  • MySQL安装卸载、idea中Database的使用、常用的sql语句

    MySQL安装卸载 MySQL安装 在下面的 &#x8D44;&#x6E90;&#x94FE;&#x63A5;中下载MySQL软件 压缩包(绿色版)…

    Java 2023年6月15日
    080
  • Android 虚拟机总结

    标记出不需要回收的对象,清除没有被标记的对象,它是最基础的收集算法,后续的算法都是对其的不足进行改进。 标记后会产生大量不连续的内存碎片。 将操作区域分为两块,每次只使用一块,当内…

    Java 2023年6月7日
    0101
  • Java: native

    解释 native主要用于 方法上 1、一个native方法就是一个Java调用非Java代码的接口。一个native方法是指该方法的实现由非Java语言实现,比如用C或C++实现…

    Java 2023年6月7日
    094
  • NoteOfMySQL-08-视图

    视图是从一个表或多个表中导出的表,是一种虚拟存在的表,不占用存储空间。视图可以使用户的操作更方便,并且可以保障数据库系统安全性。 1. 视图概述 视图中保存的仅仅是一条select…

    Java 2023年6月5日
    086
  • Java高并发教程:Future异步回调模式

    Netty和Guava一样,实现了自己的异步回调体系: Netty继承和扩展了JDK Future系列异步回调的API,定义了自身的Future系列接口和类,实现了异步任务的监控、…

    Java 2023年5月29日
    088
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球