maven打包分离 resource、lib包

Maven 分离lib和resource的打包配置 使用Maven打包并分离resource,只需两步:1、修改pom.xml 2、添加assembly.xml 阅读详情

在工作中一般创建的工程都是maven工程,用spring boot进行项目开发,maven插件就是自动集成的
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin>
当我们开发完成之后进行测试部署或者正式上线后,要进行迭代的时候发现需要上传的包比较大,包含了很多没有改动的资源(依赖包lib、resources),如果可以把这些包和工程jar包(只有class文件)进行分离,那么每次进行迭代的时候只需要上传修改的文件或者工程jar包,就会节省很多时间。
下面就针对实际应用中的实践做一个配的简单说明:

maven打包的方式有很多下面就先讲解我用的一种
使用maven-assembly-plugin插件进行资源分离。
官方文档

http://maven.apache.org/plugins/maven-assembly-plugin/

第一步:修改pom.xml文件

<!--多环境支持-->
    <profiles>
        <profile>
            <id>prod</id>
            <build>
                <!--包名-->
                <finalName>authoritymanagement</finalName>
                <resources>
                    <resource>
                        <directory>src/main/java</directory>
                        <filtering>false</filtering>
                        <excludes>
                            <exclude>**/*.java</exclude>
                        </excludes>
                    </resource>
                </resources>
                <plugins>

                    <!--maven-jar-plugin 负责将应用程序打包成可执行的jar文件-->
                    <!-- 打包成jar文件,并指定lib文件夹以及resources资源文件夹 -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-jar-plugin</artifactId>
                        <version>2.4</version>
                        <configuration>
                            <archive>
                                <manifest>
                                    <mainClass>com.ganinfo.MainApplication</mainClass>
                                    <classpathPrefix>lib/</classpathPrefix>
                                    <addClasspath>true</addClasspath>
                                </manifest>
                                <manifestEntries>
                                    <Class-Path>resources/</Class-Path>
                                </manifestEntries>
                            </archive>
                        </configuration>
                    </plugin>

                    <!--配置编码-->
                    <plugin>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <configuration>
                            <source>1.8</source>
                            <target>1.8</target>
                            <encoding>UTF-8</encoding>
                        </configuration>
                    </plugin>

                    <!--打包跳过测试类-->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <testFailureIgnore>true</testFailureIgnore>
                            <skip>true</skip>
                        </configuration>
                    </plugin>

                    <!--maven-assembly-plugin,负责将整个项目按照自定义的目录结构打成最终的压缩包,方便实际部署 -->
                    <plugin>
                        <!--使用插件-->
                        <artifactId>maven-assembly-plugin</artifactId>
                        <configuration>
                            <!--自定义的configuration配置后,将会生成一个demo-demo.jar 文件在目录 output 下,其中前一个demo
                            来自finalName,后一个demo来自assembly descriptor中的id,其中的内容和默认的打包出来的jar类似,
                            如果只想有finalName,则增加配置:<appendAssemblyId/>-->
                            <appendAssemblyId>false</appendAssemblyId>
                            <!--输出路径-->
                            <outputDirectory>${project.build.directory}/dist/</outputDirectory>
                            <!--描述文件位置-->
                            <descriptors>
                                <descriptor>assembly.xml</descriptor>
                            </descriptors>
                        </configuration>
                        <!--配置执行器-->
                        <executions>
                            <execution>
                                <id>make-assembly</id>
                                <!--绑定到package生命周期阶段上-->
                                <phase>package</phase>
                                <goals>
                                    <!--只运行一次-->
                                    <goal>single</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>dev</id>
            <build>
                <finalName>生成的包名</finalName>
                <plugins>
                    <plugin>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>build-info</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

添加文件 assembly.xml

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">

    <!--标识符,添加到生成文件名称的后缀符。如果指定 id 的话,目标文件则是 ${artifactId}-${id}.tar.gz-->
    <id>distribution</id>
    <formats>
        <!--指定打包类型: zip、tar、tar.gz(or tgz)、tar.bz2 (or tbz2)、tar.snappy 、tar.xz (or txz)、jar、dir、war-->
        <format>dir</format>
    </formats>

    <!--是否包含根目录-->
    <!--指定是否包含打包层目录(比如finalName是output,当值为true,所有文件被放在output目录下,否则直接放在包的根目录下)-->
    <includeBaseDirectory>false</includeBaseDirectory>
    <!--根目录名称-->
    <!--<baseDirectory>${project.build.finalName}</baseDirectory>-->

    <fileSets><!--指定要包含的文件集,可以定义多个fileSet;-->
        <fileSet>
            <!--指定要包含的目录-->
            <directory>src/main/resources/</directory>
            <!--指定当前要包含的目录的目的地-->
            <outputDirectory>/resources</outputDirectory>
        </fileSet>
        <fileSet>
            <directory>bin/</directory>
            <outputDirectory>/</outputDirectory>
        </fileSet>
        <fileSet>
            <directory>sh/</directory>
            <outputDirectory></outputDirectory>
        </fileSet>
    </fileSets>

    <!--用来定制工程依赖 jar 包的打包方式-->
    <dependencySets>
        <dependencySet>
            <!--设置相对于程序集根目录根目录的输出目录-->
            <outputDirectory>/lib</outputDirectory>
            <!--默认级别-->
            <scope>runtime</scope>
            <excludes>
                <exclude>${project.groupId}:${project.artifactId}</exclude>
            </excludes>
        </dependencySet>
        <dependencySet>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>${project.groupId}:${project.artifactId}</include>
            </includes>
        </dependencySet>
    </dependencySets>
</assembly>

在该工程目录下执行命令mvn clean package -Pprod 其中 prod 指的是pom.xml文件中配置的环境
在这里插入图片描述

执行完打包命令之后生成目录

引荐几篇文章关于配置maven的

讲解 maven-assembly-plugin
https://blog.youkuaiyun.com/chendeyou5/article/details/79448952
讲解 maven assembly实现不同环境的打包
https://blog.youkuaiyun.com/qiaoge134/article/details/62223029
讲解 多环境打包
https://blog.youkuaiyun.com/zhouyan8603/article/details/78668297
讲解 maven插件
https://segmentfault.com/a/1190000016237395

如果是maven配置的是私服的可能会出现下载不到资源的问题,
首先确认maven配置的是私服地址
1、

<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>*</mirrorOf>//表示优先请求一下的地址
    <name>Nexus aliyun</name>
    <url>私服地址</url>
</mirror>

2、在pom.xml中添加引用私服地址配置

<project>
<repositories>
    <repository>
        <id>central</id>
        <name>central</name>
        <!-- 配置仓库的地址 -->
        <url>http://localhost:8081/nexus/content/groups/</url>
    </repository>
</repositories>
</project>

继续更新中。。。。

springboot打包分离lib和resource 打包分离lib和resource 分离后的目录结构 target/output/ --- lib/ /*存放所有依赖jar包,包括子模块打成的jar包*/ --- resource/ /*存放资源文件,yml 、properties、xml等*/ --- demo-0.0.1-SNAPSHOT.jar 配置: maven-jar-plugin:负责打包、排除lib和资源文件,把外部目录加入classpath中,指定主类入口 maven... 阅读详情

相关推荐

Maven-SpringBoot打包-分离lib和resources

目标: 1. 分离jar包依赖到外部lib文件夹 2. 分离相关配置文件到外部 3. package jar 包,仅包含代码文件;通过/META_INF/MANIFEST.MF 控制加载依赖jar包 和 启动类 实现 - 直接上pom配置: 适配步骤: 1. 变更 groupId 和 artifactId 为项目信息。 2. maven-jar-plugin 的 mainClass ...

靳国栋的博客 1394

maven 打包包含lib

springboot 项目。

qq_34874784的博客 3903

@resource所需包.rar

spring使用@Resource所需包

Maven打包排除内部配置文件及配置启动类lib路径

Maven打包排除内部配置文件 pom.xml配置如下 <build> <plugins> <plugin> <!-- 外部jar依赖配置 --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plu

qq_27242695的博客 932

鱼眼相机去畸变(图像拉直/展开/矫正)算法及实战总结

1、算法说明经纬度矫正法, 可以把鱼眼图想象成半个地球, 然后将地球展开成地图,经纬度矫正法主要是利用几何原理, 对图像进行展开矫正。经过P点的入射光线没有透镜的话,本应交于相机成像平面的e点。然而,经过鱼眼相机的折射,光线会交于相机成像平面的d点,就产生了畸变,因此畸变图像整体上呈现出像素朝图像中心点聚集的态势。而去畸变,就是将折射到d点的点,重新映射回到e点,因此去畸变之后的图像与原始的鱼眼图像相比,仿佛是把向心聚集的像素又重新向四周铺展开来。AVM环视系统——鱼眼相机去畸变算法 - 知乎。

大胡子大叔的专栏 2万+

手把手教你用AirSim生成无人机训练数据集:RGB/深度图/分割图全攻略

本文详细介绍了如何使用AirSim仿真插件在UE4环境中生成无人机训练数据集,涵盖RGB、深度图和分割图等多种模态数据的采集与处理。通过实战指南,读者可以掌握环境配置、多模态数据采集、自动化流程设计及数据后处理等关键技术,为无人机视觉算法开发提供高质量训练数据。

weixin_29008805的博客 449

maven打包 本地lib包解包打入

【代码】maven打包 本地lib包解包打入。

卑微的码农 874

基于STM32、HAL库的TLV320AIC3204IRHBR音频接口芯片驱动程序设计

* 开启所有数字部分 */#define TLV320AIC3204_REG_LEFT_HEADPHONE_OUT_VOLUME 0x0C /* 左声道耳机输出音量 */#define TLV320AIC3204_REG_DIGITAL_AUDIO_PATH_CONTROL 0x05 /* 数字音频路径控制 */#define TLV320AIC3204_REG_ANALOG_HP_FILTER_CONTROL 0x34 /* 模拟耳机滤波器控制 *//* 最大音量 */

corlin6688的博客 521

maven打包(打成一个可执行jar)和(单独打包resource和lib)

Maven打包,打包为独立可运行的jar,分开打包lib和resources,打包本地jar

qq_62408075的博客 2714

【立创EDA-PCB设计基础】1.嘉立创EDA专业版软件安装+PCB基本概念+原理图绘制

本文详解PCB基本概念以及实现MCU最小系统原理图的绘制(原理图包括MCU芯片GD32F103C8T6、外部晶振、输出端口、USB输入口、5v转3v3稳压输出、复位按键、唤醒按键、LED)及嘉立创EDA专业版软件安装。为本专栏【立创EDA-PCB设计基础】后面章节实现PCB绘制做准备。

嵌入式阿齐Archie 3万+

基于STM32设计的电能质量控制系统_353

本项目基于STM32F103RCT6微控制器设计了一套电能质量控制系统,实现了对火焰、烟雾、环境温湿度、电压、电流及功率等多项参数的实时监测与报警。系统通过MQ2烟雾传感器、火焰传感器、SHT30温湿度传感器及电力参数采集模块采集数据,采用高电平触发有源蜂鸣器进行异常报警。采集的数据通过ESP8266无线模块以AP+TCP模式上传至基于Qt开发的手机APP和电脑上位机,实现远程实时监控和历史数据管理。系统配备1.44寸LCD显示屏,实现本地数据显示。软件采用Keil5开发,采用寄存器编程方式,提高系统响应速

253

SpringBoot jar包和内部lib包分离(以及第三方包)

多maven配置项目也可以正常实现jar包和内部lib包分离。3.用maven命令install安装第三方包到本地仓库。2022/12/01 要求引入第三方jar包进行打包。上面的链接可以将 jar包和内部lib包实现分离。4.安装成功后 再进行打包就没有问题了。2.把第三方包复制到lib目录下面。

qq_38278142的博客 446

uni-app - 修改默认端口,H5 项目控制台运行出来的 IP 地址的默认端口号(H5 项目运行后控制台,修改项目运行到内置浏览器默认 8080 端口号)

uni-app运行到H5修改默认端口号,uni-app如何修改默认端口,uni-app修改默认端口,uni-app本地运行修改调试已上线微信H5项目,请问在UNIAPP的H5运行调试时候的IP是否可以自己设置固定,uni-app开发环境,如何设置h5服务器的端口,uni-app如何修改默认端,uni-app修改默认端口,uni-app指定端口号,uni-app-修改H5项目控制台运行出来的IP地址的默认端口号(H5项目运行后控制台,修改项目运行到内置浏览器默认8080端口号)

🏆 前端领域优质创作者 9887

springboot使用maven打包分离lib和resource

springboot使用maven打包分离lib和resource 项目发版,为了应对更新多变的依赖jar包,实现增量或替换依赖jar包,越来越多的企业实现源代码和依赖jar包和依赖配置分离,更好的应对复杂多变的现场和生产环境,使用maven打包配置如下: <build> <plugins> <!-- 指定启动类,将依赖打成外部jar包 --> <...

jiazhipeng12的专栏 920

YOLOv8结合GhostNet实现轻量化目标检测:模型设计与性能评测

GhostNet系列的核心是**“幽灵特征图(Ghost Feature Map)”** 概念:通过简单的线性变换(如深度卷积)生成“幽灵特征”,这些特征与原始特征融合后,能以极低的计算成本带来丰富的语义信息。为了突出GhostNet系列的必要性,设计消融实验:分别测试“仅主卷积”“仅幽灵卷积”“GhostNet(主卷积+幽灵卷积)”三种方案的性能,用数据证明“幽灵特征”的不可替代性。简单来说,引入GhostNet系列的YOLOv8,既能体现你的技术深度,又能让毕设的“落地性”大幅提升。

m0_71589036的博客 116

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

芝法酱学习笔记(0.4)——SpringBoot多模块项目打包,resource分离,lib分离,启动脚本

本篇讲解SpringBoot多模块的打包,资源resource、配置config和lib分离,编写启动脚本

hataksumo的博客 2061

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

springboot maven打包把 lib resource 资源文件打包到与jar同级目录

 效果如下     &lt;build&gt; &lt;plugins&gt; &lt;plugin&gt; &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt; &lt;version&gt;2.3.2&lt;/version&gt;

u011011153的博客 7924

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

springboot 打jar包后启动,resource下配置文件找不到和lib下jar包打包问题解决

首先把项目中那些乱七八糟的pom的依赖,插件都去掉,因为再这上面吃了大亏....都不知道为什么那些东西会存在,自己的项目也用不上的,揪心,整了2小时.... 先上图,项目结构如图所示: 项目中的引入方式为: 在此进行service.xml文件的引入,在本地run/debug启动都没有什么问题,但是打成jar包之后启动就是找不到文件,修改pom文件如下: &lt;res...

长河的博客 1万+

Maven打包:将config和lib以及jar分开打包(探讨各种打包的区别)

1. 声明 当前内容主要为测试和使用Maven打包,将当前的资源文件、maven的lib文件以及生成的jar文件分开来 当前内容为: 使用maven打包并分离jar项目中的lib、resources、jar 使用springboot打包 使用eclipse的export方式打包 比较各种的优缺点 2.maven打包配置(将lib、resources、jar分离) 基本的pom <build> <plugins> <plugin> <groupI

编程学习者的博客 3680

springboot使用maven打包实现resources分离和实现lib、resources分离

jar包分离resources文件夹 修改pom.xml文件 <build> <!-- jar包名 --> <finalName>SearchIntegration</finalName> <plugins> <plugin> ...

weixin_30621959的博客 1145

在pom文件中引入本地jar包,并打包

在pom文件中引入本地jar包,并打包

weixin_50542919的博客 1万+

Spring boot 打包时含有外部引用的jar包,打包没有打入lib中解决方法

在项目开发时有时我们需要引入一些在maven仓库中不存在的包,此时,我们需要在maven的pom.xml中添加如下依赖方法: &lt;dependency&gt; &lt;groupId&gt;com.pproc.dependency&lt;/groupId&gt; &lt;artifactId&gt;aeswithjec&lt;/artifactId&gt; &lt;version&g...

鼓鼓的小飞飞的博客 1万+

maven 项目打包抽取lib resource( build节点配置)

配置总结: 一 jar包位置 1.把lib目录下所有的文件(外部依赖的jar) 2.依赖的所有maven jar包 3.可运行的工程jar文件的存放路径 (打开后是.class文件) 4.源代码的jar包(打开后是.java源文件)---四部分的jar全部放到lib目录中 二 启动命令位置 把放在根目录(不一定是根目录)下的脚本文件.sh,.bat拷贝到bin目录中 三 配置文件...

Zsigner的博客 1335

SpringBoot打包 lib分离 config分离

最终打包后的目录结构 ├── lib ├── logs ├── config │ ├── application.yml │ ├── logback.xml └── start.sh pom.xml <build> <plugins> <!-- Compiler 插件, 设定JDK版本 --> ...

cherics的博客 2296
上一篇: spring cloud学习之六: Hystrix(熔断器)
下一篇: spring cloud学习之七:声明式服务调用 Feign
Small_StarOne
博客等级 码龄8年 11粉丝 34原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值