当前位置: 首页 > news >正文

使用maven快速生成打包文件2

前面介绍了使用Maven打包基于SpringBoot开发的微服务,打出的JAR包包含所有的依赖,因此一般包比较大,可能会有几百M,但是有时候在调试阶段,经常需要更新程序,每更新一次就要上传几百M的JAR包,特别不方便,因此这里提供一种方法将依赖的JAR包统一放到lib目录中,这样打出的微服务包就很小了,更新起来也方便很多。先上pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>kafka-roma</artifactId><version>1.0</version><name>kafka-roma</name><description>kafka-roma</description><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.6.13</spring-boot.version><maven.test.skip>true</maven.test.skip></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>2.7.2</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.52</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><finalName>${project.artifactId}</finalName><resources><resource><directory>src/main/resources</directory><filtering>true</filtering><excludes><exclude>*.properties</exclude><exclude>*.yml</exclude><exclude>*.xml</exclude></excludes></resource></resources><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>${java.version}</source><target>${java.version}</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><archive><manifest><addClasspath>true</addClasspath><classpathPrefix>lib/</classpathPrefix><mainClass>org.example.roma.KafkaRomaApplication</mainClass></manifest></archive></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><includeSystemScope>true</includeSystemScope><layout>ZIP</layout><jvmArguments>-Dfile.encoding=UTF-8</jvmArguments><includes><include><groupId>nothing</groupId><artifactId>nothing</artifactId></include></includes></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><executions><execution><id>copy-dependencies</id><phase>prepare-package</phase><goals><goal>copy-dependencies</goal></goals><configuration><outputDirectory>${project.build.directory}/roma/lib</outputDirectory><overWriteReleases>false</overWriteReleases><overWriteSnapshots>false</overWriteSnapshots><overWriteIfNewer>true</overWriteIfNewer><includeScope>compile</includeScope><excludeScope>test</excludeScope><excludeArtifactIds>junit-jupiter,junit-jupiter-api,junit-jupiter-engine,junit-jupiter-params,junit-platform-commons,junit-platform-engine</excludeArtifactIds></configuration></execution></executions></plugin><plugin><artifactId>maven-resources-plugin</artifactId><executions><execution><id>copy-resources</id><phase>package</phase><goals><goal>copy-resources</goal></goals><configuration><resources><resource><directory>src/main/resources</directory><includes><include>*.properties</include><include>*.yml</include><include>**/*.xml</include></includes></resource></resources><outputDirectory>${project.build.directory}/roma/config/</outputDirectory></configuration></execution></executions></plugin><plugin><artifactId>maven-resources-plugin</artifactId><executions><execution><id>copy-resources1</id><phase>package</phase><goals><goal>copy-resources</goal></goals><configuration><resources><resource><directory>src/main/bin</directory><includes><include>start.sh</include><include>stop.sh</include></includes></resource></resources><outputDirectory>${project.build.directory}/roma/bin/</outputDirectory></configuration></execution><execution><id>copy-resources2</id><phase>package</phase><goals><goal>copy-resources</goal></goals><configuration><resources><resource><directory>src/main/bin</directory><includes><include>run.sh</include><include>run.bat</include></includes></resource></resources><outputDirectory>${project.build.directory}/roma/</outputDirectory></configuration></execution><execution><id>copy-resources3</id><phase>package</phase><goals><goal>copy-resources</goal></goals><configuration><resources><resource><directory>cert</directory><includes><include>*.jks</include><include>*.crt</include></includes></resource></resources><outputDirectory>${project.build.directory}/roma/cert/</outputDirectory></configuration></execution><execution><id>copy-resources4</id><phase>package</phase><goals><goal>copy-resources</goal></goals><configuration><resources><resource><directory>${project.build.directory}</directory><includes><include>*.jar</include></includes></resource></resources><outputDirectory>${project.build.directory}/roma/</outputDirectory></configuration></execution></executions></plugin></plugins></build>
</project>

这里只介绍一下不同的部分,相同的部分,参看前面一篇

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><executions><execution><id>copy-dependencies</id><phase>prepare-package</phase><goals><goal>copy-dependencies</goal></goals><configuration><outputDirectory>${project.build.directory}/roma/lib</outputDirectory><overWriteReleases>false</overWriteReleases><overWriteSnapshots>false</overWriteSnapshots><overWriteIfNewer>true</overWriteIfNewer><includeScope>compile</includeScope><excludeScope>test</excludeScope><excludeArtifactIds>junit-jupiter,junit-jupiter-api,junit-jupiter-engine,junit-jupiter-params,junit-platform-commons,junit-platform-engine</excludeArtifactIds></configuration></execution></executions>
</plugin>

maven-dependency-plugin插件将项目的依赖库复制到一个指定的目录中,指定的目录配置到outputDirectory即可。excludeScope表示将test的依赖排除掉,也可以在excludeArtifactIds中指定特定的依赖。
然后编译打包的时候,只需执行maven clean package即可。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • EmguCV学习笔记 C# 5.2 仿射变换
  • 从CSS注入到渗透未知网页
  • Nuxt学习_基础知识(二)
  • 开源模型应用落地-qwen2-7b-instruct-LoRA微调模型合并-Axolotl-单机单卡-V100(十)
  • 短剧视频推广连续多日遭受大量DDOS攻击,如何应对
  • 单片机驱动彩屏最简方案:单片机_RA8889最小开发板驱动控制TFT彩屏介绍(一)方案架构
  • 如何优雅的在页面上嵌入AI-Agent人工智能
  • [godot] 采用状态机时,如何处理攻击时移动?如“冲撞”
  • 【R语言】基于多模型的变量重要性图 (Variable Importance Plots)
  • 开学季数码好物分享!推荐适合学生党好用又实惠的平替电容笔!
  • 叉车驾驶员状态监控系统,司机身份安全识别,强化监管能力建设!
  • pyqt 用lamada关联信号 传递参数 循环
  • 富格林金业:注意避免曝光交易黑幕
  • python深度学习框架——TensorFlow
  • 企业如何通过费用专项分析节约成本?BI大神带你实操数据分析过程!
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • const let
  • Median of Two Sorted Arrays
  • Mysql数据库的条件查询语句
  • python3 使用 asyncio 代替线程
  • Terraform入门 - 3. 变更基础设施
  • vue中实现单选
  • Vue组件定义
  • 半理解系列--Promise的进化史
  • 初识MongoDB分片
  • 对象管理器(defineProperty)学习笔记
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 如何解决微信端直接跳WAP端
  • 微信小程序:实现悬浮返回和分享按钮
  • 学习ES6 变量的解构赋值
  • nb
  • MPAndroidChart 教程:Y轴 YAxis
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​力扣解法汇总946-验证栈序列
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (55)MOS管专题--->(10)MOS管的封装
  • (Java数据结构)ArrayList
  • (void) (_x == _y)的作用
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (五)activiti-modeler 编辑器初步优化
  • (转)socket Aio demo
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • 、写入Shellcode到注册表上线
  • .Net Core 生成管理员权限的应用程序
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .NET Micro Framework初体验
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .NetCore部署微服务(二)
  • .net访问oracle数据库性能问题