Maven引用本地jar包以及打包发布注意事项

2023-05-16

1、Maven引用本地jar包

  • 首先在resources目录下创建名为【lib】的文件夹,然后将本地jar包放入该文件夹下,如图

  •  然后在pom文件中引用该jar包
<dependency>
    <groupId>org.openqa.selenium</groupId>
    <artifactId>selenium-commons</artifactId>
    <scope>system</scope>
    <systemPath>${basedir}/src/main/resources/lib/selenium-commons-4.4.2.jar</systemPath>
    <version>4.2.2</version>
</dependency>

2、maven编译时找不到本地引用的jar包

在maven编译完成后,运行jar包的时候报错找不到本地引用的jar包,需要在pom文件中build中的【spring-boot-maven-plugin】中加一段配置增加配置:

<build>    
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
            <!--maven编译时将本地引用的jar包一起打包-->
            <includeSystemScope>true</includeSystemScope>
        </configuration>
    </plugin>
</build> 

同步下maven后重新编译发现问题解决。


3、Maven将本地jar包添加到本地仓库【可被pom文件调用】

  • 首先确保本地存在maven环境,然后进入settings文件查看setting配置本地仓库路径,入下图所示:

  • 然后将本地jar包放到一个目录下

  • 在文件路径输入cmd直接进入cmd控制台。 
  • 指定jar包在maven仓库的groupId,artifactId,version等信息:
<dependency>
    <groupId>com.bw</groupId>
    <artifactId>mqtt-producer</artifactId>
    <version>1.1.2</version>
</dependency>
  • 接着在cmd执行maven命令:
mvn install:install-file "-Dfile=mqtt-producer-1.1.2.jar" "-DgroupId=com.bw" "-DartifactId=mqtt-producer" "-Dversion=1.1.2" "-Dpackaging=jar"

看到SUCCESS则表示上传成功。

  • 最后到 setting配置本地仓库路径下查看仓库是否添加成功

 上图可以看到添加成功。最后pom文件刷新可看到本地仓库引用成功。


 4、maven编译后将项目中用到的jar包拷贝到target某文件夹下

在pom中添加如下配置

<build>
    <!--拷贝依赖到jar外面的lib目录-->
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
            <execution>
                <id>copy-lib</id>
                <phase>package</phase>
                <goals>
                    <goal>copy-dependencies</goal>
                </goals>
                <configuration>
                    <outputDirectory>target/lib</outputDirectory>
                    <excludeTransitive>false</excludeTransitive>
                    <stripVersion>false</stripVersion>
                    <includeScope>runtime</includeScope>
                </configuration>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
            <archive>
                <!-- 生成的jar中,不要包含pom.xml和pom.properties这两个文件 -->
                <addMavenDescriptor>false</addMavenDescriptor>
                <manifest>
                    <!-- 是否要把第三方jar加入到类构建路径 -->
                    <addClasspath>true</addClasspath>
                    <!-- 外部依赖jar包的最终位置 -->
                    <classpathPrefix>lib/</classpathPrefix>
                    <!-- 项目启动类 -->
                    <mainClass>com.saas.reptile.ReptileApplicatio</mainClass>
                </manifest>
            </archive>
        </configuration>
    </plugin>
</build>

maven编译后可以在target中看到生成的jar包,如下图:


5、maven编译打包时不编译项目中的依赖包

需要在pom文件中build中的【spring-boot-maven-plugin】中增加配置:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <layout>ZIP</layout>
        <!-- 注释后和依赖包一起打包 取消注释则不打包依赖-->
        <includes>
            <include>
                <groupId>nothing</groupId>
                <artifactId>nothing</artifactId>
            </include>
        </includes>
    </configuration>
</plugin>

再配合上述的将项目中用到的jar包拷贝到target某文件夹下的【build】配置,将依赖包从项目jar包中完全抽离出来;

最后发布jar包的时候在jar包同级目录创建名为【lib】的文件夹,作为jar包外部依赖,如下图所示


6、maven编译打war包

  • 首先在启动类中继承SpringBootServletInitializer类,并重写SpringApplicationBuilder的configure方法。
@SpringBootApplication
@ServletComponentScan
@EnableScheduling
public class DemoApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder springApplicationBuilder) {
        return springApplicationBuilder.sources(DemoApplication.class);
    }
 
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
  • 其次改动pom文件

首先将<packaging>改成【war】;

然后排除【spring-boot-starter-web】依赖包中的tomcat依赖;

最后加入【javax.servlet】依赖。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>

    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <scope>provided</scope>
</dependency>
  • 最后修改build
<build>
    <!-- 打包后的服务名称 -->
    <finalName>dsm</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <!--可以不用添加web.xml-->
        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.1.0</version>
        </plugin>
        <plugin>
            <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-deploy-plugin -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-deploy-plugin</artifactId>
            <!--deploy 时忽略 model-->
            <configuration>
                <skip>true</skip>
            </configuration>
        </plugin>
    </plugins>
</build>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Maven引用本地jar包以及打包发布注意事项 的相关文章

  • PVE+NUT+群晖等配置

    文章目录 配置文件说明 默认配置 翻译的 ups conf 设置ups通信相关 upsd conf 设置ups客户访问的相关信息 upsd users 设置upsd用户 nut conf nut的配置 主要是模式 xff0c 决定使用哪些文
  • stm32霸道-lvgl移植学习(一)

    文章目录 效果有用链接要求创建工程屏幕驱动以及触屏驱动LVGL PortWidgets demo其它 效果 目前显示驱动显示较慢 xff0c 后续会优化 有用链接 LVGL官网 代码下载 要求 要求最低要求 建议要求架构16 32 64位微
  • E6410安装PVE直通显卡安装LibreELEC系统

    文章目录 查看cpu是否支持直通音频笔记本关盖设定BIOS设定启动内核IOMMU支持添加驱动黑名单绑定核显到vfio模块然后新建一个虚拟机安装LibreELEC注意事项重启 VM 时 GPU 直通失败如果直通后遇到问题了 xff0c 开机出
  • 关于SublimeText3和MinGW安装的一些心得

    本人也是为了学习C 43 43 xff0c 在无意中找到用Sublime Text3和MinGW来进行组合搭建从而完成代码的编译的运行 安装过程期间 xff0c 也出现了一些错误 xff0c 下面就把我的出现的一些错误贴出来 xff0c 看
  • confluence linux 安装教程

    jdk的安装 参考此链接 confluence下载 Confluence官网 linux安装 将下载后的安装包上传到linux系统中 xff0c 并授予权限 xff0c 注意请使用root用户安装 xff0c 否则会出现部分功能无法使用的情
  • Boost库编译指南

    1 Boost 库简介 Boost 是一个开源的 C 43 43 库集合 xff0c 提供了许多高质量的库 xff0c 涵盖了许多不同的领域 xff0c 如智能指针 多线程编程 正则表达式 数学库等等 Boost 的目标是提高 C 43 4
  • 解决Flask中出现的跨域问题has been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘ header...

    今天在用flask做接口进行本地调用测试时发现调用报错 如图所示 解决办法 xff1a 在项目目录打开终端 xff0c 安装以下库 pip install U flask cors 再在代码中插入 CORS app resources 61
  • 【Web笔记】Html学习手册

    HTML简介 HTML是 超文本标记语言 xff08 HyperText Markup Language xff09 的简称 HTML的前世今生 从初期的网络诞生后 xff0c 已经出现了许多HTML版本 版本发布时间HTML1991HTM
  • webrtc-kurento

    WebRTC 呼叫者通过 navigator mediaDevices getUserMedia en US 捕捉本地媒体 呼叫者创建一个RTCPeerConnection 并调用 RTCPeerConnection addTrack 注
  • windows10远程连接centos图像化桌面步骤和遇到的问题

    一 安装配置XRDP 首先需要切换到root用户下 xff1b 1 安装epel库 1 xff09 检测系统是否已经安装epel库 rpm qa grep epel 2 xff09 安装epel库 yum install epel rele
  • linux磁盘分区、挂载、扩容

    1 fdisk l 查看磁盘情况 xff0c 可以看到总共4块磁盘 xff0c sda是系统盘及根目录 xff0c 剩余sdb sdc sdd三块磁盘可用 root 64 openEuler dev fdisk l Disk dev sdd
  • QT 线程之QWaitCondition(深入理解)

    QWaitCondition 允许线程在某些情况发生时唤醒另外的线程 一个或多个线程可以阻塞等待一QWaitCondition 用wakeOne 或wakeAll 设置一个条件 wakeOne 随机唤醒一个 xff0c wakeAll 唤醒
  • Qt QMessageBox使用详解

    本文详细的介绍了QMessageBox控件的各种操作 xff0c 例如 xff1a 消息提示框的使用 判断消息提示框的按钮 标准图标和自定义图标 定时关闭 自定义样式等操作 本文作者原创 xff0c 转载请附上文章出处与本文链接 Qt QM
  • C++ permutation排列算法详解(深入了解,一文学会)

    排列就是一次对对象序列或值序列的重新排列 例如 xff0c ABC 中字符可能的排列是 xff1a 34 ABC 34 34 ACB 34 34 BAC 34 34 BCA 34 34 CAB 34 34 CBA 34 三个不同的字符有 6
  • QT QMenuBra QMenu QAction 菜单栏 操作详解

    本文详细的介绍了QMenuBra QMenu QAction 菜单栏的各种操作 xff0c 例如操作 xff1a 新建界面 加入菜单项 加入子菜单 新建二级子菜单 QAction分隔符 pMenuBar 点击信号 触发信号 设置图标 设置禁
  • 网络编程POSIX规范要求数据类型

    数据类型 说明 来源 int8 t 带符号8位整数 lt sys types h gt uint8 t 无符号8位整数 lt sys types h gt int16 t 带符号16位整数 lt sys types h gt uint16
  • 解决ajax的delete、put方法接受不到参数的问题

    通过修改配置文件来实现Put和Delete请求的参数传递的问题 在web xml中添加如下代码 xff1a lt filter gt lt filter name gt HttpMethodFilter lt filter name gt
  • - Dockerfile 指令、构建过程

    查看Dockerfile中可以使用的全部指令 xff1a lt http docs docker com reference builder gt 制作Docker image 有两种方式 xff1a 一是使用 Docker contain
  • python正则表达式匹配邮箱地址是否合法

    题目 xff1a 1 xff09 请尝试写一个验证Email地址的正则表达式 版本一应该可以验证出类似的Email xff1a someone 64 gmail com bill gates 64 microsoft com 2 xff09
  • 公网IP和内网IP的区别? 什么是127.0.0.1?

    IP地址是设备在网络上的唯一标识符 xff0c 比如无线路由器有两个IP xff0c 公网IP xff08 例如100 78 118 73 连接互联网 xff0c 私有 xff08 内网 xff09 IP xff08 如192 168 1

随机推荐

  • 计算机网络课程设计之Tracert与Ping 程序设计与实现

    一 预备知识 ICMP ICMP的报文是封装在IP数据部分中的 按照我的理解 xff0c ICMP就是在网络层中 xff0c 反馈一些转发 访问等操作时的附带信息 ICMP分为两种 xff0c ICMP差错报告报文 xff08 IP传输时的
  • 计算机网络课程设计之网络聊天程序的设计与实现

    TCP和UDP在接收方的区别 xff08 实际上本实验中用不着 xff09 UDP 协议 User Datagram Protocol 用户数据报协议 xff0c 是一 种保护消息边界的 xff0c 不保障可靠数据的传输 就是指传输协议把数
  • 计算机网络课程设计之嗅探器实现

    资料来源网络 xff0c 侵权请联系删除 原理 简单说明一下什么是网络嗅探器 xff0c 网络嗅探器是一个抓取所有经过网卡数据的软件 xff0c 在一般使用电脑时 xff0c 网卡只接受到发送至本机的数据 xff0c 那是因为这是网卡是非混
  • 牛客网高级项目总结

    1 注册和登陆 登陆和注册成功之后 xff0c 在cookie里添加上token xff0c 另外在数据库中插入包含token userId的表 xff0c 用于登陆状态检验 具体检验是在拦截器上进行 xff0c 拦截器的实现过程 xff1
  • 设计模式

    面向对象设计原则 每个对象是拥有独立责任的抽象体 真正的复用是源代码不做修改 xff0c 编译 43 测试之后就不会再修改 设计原则 1 依赖倒置原则 xff08 DIP xff09 1 xff09 高层模块 xff08 稳定 xff09
  • Redis面试

    1 更新操作 https coolshell cn articles 17416 html 不可以先删除缓存 xff0c 再更新数据库 因为并发操作下 xff0c 一个更新操作删掉了缓存 xff0c 此时一个读操作进来 xff0c 读取了旧
  • 【关系代数习题】纸上得来终觉浅——数据库学习之路(4)

    题A 设有如下所示的关系S S SNAME AGE SEX C C CNAME TEACHER 和SC S C GRADE xff0c 用关系代数表达式表示下列查询语句 xff1a 1 检索 程军 老师所授课程的课程号 C 和课程名 CNA
  • 线程池

    public ThreadPoolExecutor int corePoolSize int maximumPoolSize long keepAliveTime TimeUnit unit BlockingQueue lt Runnabl
  • 爬取3499手游网下载地址信息

    爬取3499手游网下载地址信息 爬取游戏的下载地址和信息 xff0c 爬取的信息存入到数据库中 1 首先需要安装第三方库 requests xff0c lxml xff0c MySQLdb 2 先创建down software数据库 创建y
  • %d几种输出方式

    d就是普通的输出了 2d是将数字按宽度为2 xff0c 采用右对齐方式输出 xff0c 如果数据位数不到2位 xff0c 则左边补空格 2d是将数字按宽度为2 xff0c 采用左对齐方式输出 xff0c 如果数据位数不到2位 xff0c 则
  • qt开启线程界面假死问题解决

    一 前言 在 使用qt高速读取传感器数据时 xff0c 如果想要将数据实时刷新在界面 xff0c 就需要开启一个线程单独去跑读取数据函数 xff0c 并反馈给主程序 xff0c 否则在主程序中读取和刷新界面会很卡很卡 xff0c 但是在开启
  • Ubuntu Qt安装arm指定的交叉编译环境SDK方式(概述篇)

    一 前言 苦心研究了几天交叉编译环境的安装 xff0c 因为工作需要 xff0c 要在一个arm系统上运行程序 xff0c 正常已经搭配好环境了 xff0c 见此贴 xff0c 后来改为SDK的方式更好使用 xff0c 但是SDK的方式对环
  • Jetson Xavier ubuntu18.04配置vnc进行远程桌面连接

    NVIDIA Jetson Xavier开发板装不上基于gnome桌面的VNC 由于ubuntu上有多个版本的VNC 尝试了vnc4server 43 xfce4后可远程控制 xff0c 因此记录下来方便后面继续装环境 1 安装 span
  • rust gui开发 根据官网例子学习orbtk(1)

    orbtk计算器例子 效果图 依赖 orbtk span class token operator 61 span span class token string 34 0 3 1 alpha3 34 span serde derive s
  • rust gui开发 根据官网例子学习orbtk(2)

    orbtk基础组件 效果图 依赖 orbtk span class token operator 61 span span class token string 34 0 3 1 alpha3 34 span serde derive sp
  • rust gui开发 根据官网例子学习orbtk(3)

    多窗口显示 效果图 依赖 orbtk span class token operator 61 span span class token string 34 0 3 1 alpha3 34 span serde derive span c
  • Maven多仓库配置

    有两种方式配置Maven多仓库 setting xml文件的profiles标签pom xml文件的repositories标签 在使用多仓库配置时 xff0c 不管使用哪种方式 xff0c 必须先将setting xml文件中的mirro
  • Anaconda配置新的环境出现出错

    问题描述 在我使用Anaconda配置新的环境是 xff0c Anaconda出现了如下的错误 xff1a Solving environment failed CondaHTTPError HTTP 000 CONNECTION FAIL
  • iOS Touch事件UIControlEvents详解

    刚开始学习UI界面的时候 xff0c 自己用stroyboard拖按钮到控制器里面 xff0c 会发现方法默认都是UIControlEventTouchUpInside xff0c 然后我翻了一下苹果的官方文档 xff0c 发现UICont
  • Maven引用本地jar包以及打包发布注意事项

    1 Maven引用本地jar包 首先在resources目录下创建名为 lib 的文件夹 xff0c 然后将本地jar包放入该文件夹下 xff0c 如图 然后在pom文件中引用该jar包 lt dependency gt lt groupI