当前位置:首页 > 科技  > 软件

深入探讨Maven打包:打造精致的Zip包

来源: 责编: 时间:2024-03-26 09:37:42 110观看
导读在部署Spring Boot生产项目时,首先需要使用Maven将其打包成一个JAR文件或者包含JAR文件的ZIP文件。随后,通过堡垒机将打包好的文件上传至服务器进行部署,或构建成Docker镜像进行发布。在这一过程中,我们需要将项目中的配

在部署Spring Boot生产项目时,首先需要使用Maven将其打包成一个JAR文件或者包含JAR文件的ZIP文件。随后,通过堡垒机将打包好的文件上传至服务器进行部署,或构建成Docker镜像进行发布。在这一过程中,我们需要将项目中的配置文件或静态资源放置在JAR包之外,这样在修改配置文件或静态资源时就无需重新打包。为了构建ZIP文件,我们使用了Maven Assembly Plugin插件,该插件用于创建项目分发包,通过一个XML描述文件定义打包内容。本文将详细介绍这一流程。sQI28资讯网——每日最新资讯28at.com

maven-assembly-plugin简介

maven-assembly-plugin 是一个 Maven 插件,用于创建项目分发包。该插件可以帮助将项目的构建输出、依赖库等资源打包成一个归档文件,如 JAR、ZIP、TAR 等,方便项目的部署和发布。sQI28资讯网——每日最新资讯28at.com

以下是 maven-assembly-plugin 的一些主要特点和用途:sQI28资讯网——每日最新资讯28at.com

  • 灵活的配置:通过配置插件,可以定义不同的打包方式和内容,满足各种项目的需求。可以选择包含依赖库、特定文件、目录结构等。
  • 多种打包格式:支持生成不同格式的归档文件,如 JAR 包含所有依赖、ZIP 压缩文件、TAR 文件等,可以根据实际情况选择合适的打包格式。
  • 自定义描述符:除了预定义的描述符外,还可以编写自定义描述符文件,以更精细的方式控制打包过程,定义需要包含的文件、目录结构等。
  • 插件执行阶段:通常在 Maven 构建的某个阶段(如 package 阶段)触发执行,生成所需的分发包。
  • 简化部署流程:打包成归档文件后,可以方便地进行部署和发布,简化了项目的交付流程。

maven-assembly-plugin 配置

让我们来看一下 Maven Assembly Plugin 的配置文件 package.xml,这个文件定义了项目打包的内容和形式。在这个 XML 文件中,我们定义了项目打包的格式为 zip 和 dir,同时指定了一些文件和目录的打包规则。sQI28资讯网——每日最新资讯28at.com

package.xmlsQI28资讯网——每日最新资讯28at.com

<?xml versinotallow="1.0" encoding="UTF-8"?><assembly        xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"        xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd"> <!--项目打包统一文件 --> <id>package</id> <formats>  <format>zip</format>    <format>dir</format> </formats> <includeBaseDirectory>false</includeBaseDirectory>    <dependencySets>        <dependencySet>            <outputDirectory>lib</outputDirectory>            <scope>runtime</scope>            <excludes>                <exclude>${groupId}:${artifactId}</exclude>            </excludes>        </dependencySet>    </dependencySets> <fileSets>  <!-- 启动脚本文件打包 -->  <fileSet>   <directory>bin/</directory>   <outputDirectory>./</outputDirectory>            <includes>                <include>*.sh</include>            </includes>   <fileMode>0755</fileMode>   <lineEnding>unix</lineEnding>  </fileSet>  <!--资源文件打包 -->  <fileSet>   <directory>src/main/resources</directory>   <outputDirectory>./</outputDirectory>  </fileSet>  <!-- 启动jar文件打包 -->  <fileSet>   <directory>${project.build.directory}</directory>   <outputDirectory>./</outputDirectory>   <includes>    <include>*.jar</include>   </includes>  </fileSet> </fileSets></assembly>

在 package.xml 中,我们还可以定义需要打包的依赖库、启动脚本文件、静态资源文件以及启动 jar 文件等内容。也可以在通过来排除一些我们不需要的资源, 通过这个 XML 文件,我们可以灵活地配置项目打包的内容和结构。sQI28资讯网——每日最新资讯28at.com

Maven Build 配置

在项目的POM文件中,我们还需要引入maven-assembly-plugin插件,并指定其配置文件。由于我们需要将配置文件和静态资源放置在JAR包之外,因此在打包过程中需要排除这些文件。Maven的配置示例如下:sQI28资讯网——每日最新资讯28at.com

<build>  <!--<finalName>${project.artifactId}-${project.version}</finalName>-->  <sourceDirectory>src/main/java</sourceDirectory>  <resources>   <resource>    <directory>${project.basedir}/src/main/resources</directory>    <filtering>true</filtering>    <excludes>     <exclude>*</exclude>    </excludes>   </resource>   <resource>    <directory>${project.basedir}/src/main/resources</directory>    <filtering>true</filtering>   </resource>  </resources>  <plugins>   <plugin>    <groupId>org.apache.maven.plugins</groupId>    <artifactId>maven-resources-plugin</artifactId>    <version>3.1.0</version>    <configuration>     <encoding>UTF-8</encoding>     <nonFilteredFileExtensions>      <nonFilteredFileExtension>xls</nonFilteredFileExtension>      <nonFilteredFileExtension>xlsx</nonFilteredFileExtension>      <nonFilteredFileExtension>csv</nonFilteredFileExtension>     </nonFilteredFileExtensions>    </configuration>   </plugin>   <plugin>    <groupId>org.apache.maven.plugins</groupId>    <artifactId>maven-jar-plugin</artifactId>    <version>3.1.0</version>    <configuration>     <archive>      <!-- 添加index则不从mainfest中读取classpath,而是从Index.list中读取                        <index>true</index> -->      <manifest>       <mainClass>cn.xj.snowflake.SnowflakeApplication</mainClass>       <addClasspath>true</addClasspath>       <classpathPrefix>lib/</classpathPrefix>       <packageName>${project.artifactId}-${project.version}</packageName>      </manifest>     </archive>     <excludes>      <exclude>config/**</exclude>      <exclude>mapper/**</exclude>      <exclude>mybatis/**</exclude>      <exclude>static/**</exclude>      <exclude>templates/**</exclude>      <exclude>i18n/**</exclude>      <exclude>lib/**</exclude>      <exclude>vm/**</exclude>      <exclude>*.txt</exclude>      <exclude>*.xml</exclude>      <exclude>*.properties</exclude>      <exclude>*.yml</exclude>      <exclude>*.properties</exclude>     </excludes>    </configuration>   </plugin>   <plugin>    <groupId>org.apache.maven.plugins</groupId>    <artifactId>maven-dependency-plugin</artifactId>    <executions>     <execution>      <id>copy</id>      <phase>compile</phase>      <goals>       <goal>copy-dependencies</goal>      </goals>      <configuration>       <outputDirectory>${project.build.directory}/lib</outputDirectory>       <overWriteReleases>false</overWriteReleases>       <overWriteSnapshots>false</overWriteSnapshots>       <overWriteIfNewer>true</overWriteIfNewer>       <includeScope>compile</includeScope>      </configuration>     </execution>    </executions>   </plugin>   <plugin>    <artifactId>maven-assembly-plugin</artifactId>    <configuration>     <appendAssemblyId>false</appendAssemblyId>     <descriptors>      <descriptor>conf/package.xml</descriptor>     </descriptors>    </configuration>    <executions>     <execution>      <id>make-assembly</id>      <phase>package</phase>      <goals>       <goal>single</goal>      </goals>     </execution>    </executions>   </plugin>  </plugins> </build>

在 Maven Build 的配置中,我们引入了 maven-resources-plugin、maven-jar-plugin、maven-dependency-plugin 和 maven-assembly-plugin 这几个插件,并对它们进行了相应的配置。sQI28资讯网——每日最新资讯28at.com

总结

当我们执行 mvn package 命令进行打包时,Maven 会按照配置文件 package.xml 和插件的配置来生成最终的分发包。Maven Assembly Plugin 会根据配置文件定义的规则将项目的相关文件、依赖库等内容打包成指定的格式,并完成最终的分发包构建。sQI28资讯网——每日最新资讯28at.com

通过以上的配置和打包过程,我们可以很方便地使用 Maven 来管理项目的打包和发布,而不需要手动进行复杂的文件拷贝和整理工作。sQI28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-79310-0.html深入探讨Maven打包:打造精致的Zip包

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 同城双活:交易链路的稳定性与可靠性探索

下一篇: 美国男子因拨打诈骗性质骚扰电话,被美国法院罚款 991.8 万美元

标签:
  • 热门焦点
  • Find N3入网:最高支持16+1TB

    Find N3入网:最高支持16+1TB

    OPPO将于近期登场的Find N3折叠屏目前已经正式入网,型号为PHN110。本次Find N3在外观方面相比前两代有很大的变化,不再是小号的横向折叠屏,而是跟别的厂商一样采用了较为常见的
  • 对标苹果的灵动岛 华为带来实况窗功能

    对标苹果的灵动岛 华为带来实况窗功能

    继苹果的灵动岛之后,华为也在今天正式推出了“实况窗”功能。据今天鸿蒙OS 4.0的现场演示显示,华为的实况窗可以更高效的展现出实时通知,比如锁屏上就能看到外卖、打车、银行
  • 十个可以手动编写的 JavaScript 数组 API

    十个可以手动编写的 JavaScript 数组 API

    JavaScript 中有很多API,使用得当,会很方便,省力不少。 你知道它的原理吗? 今天这篇文章,我们将对它们进行一次小总结。现在开始吧。1.forEach()forEach()用于遍历数组接收一参
  • 分享六款相见恨晚的PPT模版网站, 祝你做出精美的PPT!

    分享六款相见恨晚的PPT模版网站, 祝你做出精美的PPT!

    1、OfficePLUSOfficePLUS网站旨在为全球Office用户提供丰富的高品质原创PPT模板、实用文档、数据图表及个性化定制服务。优点:OfficePLUS是微软官方网站,囊括PPT模板、Word模
  • Flowable工作流引擎的科普与实践

    Flowable工作流引擎的科普与实践

    一.引言当我们在日常工作和业务中需要进行各种审批流程时,可能会面临一系列技术和业务上的挑战。手动处理这些审批流程可能会导致开发成本的增加以及业务复杂度的上升。在这
  • 深度探索 Elasticsearch 8.X:function_score 参数解读与实战案例分析

    深度探索 Elasticsearch 8.X:function_score 参数解读与实战案例分析

    在 Elasticsearch 中,function_score 可以让我们在查询的同时对搜索结果进行自定义评分。function_score 提供了一系列的参数和函数让我们可以根据需求灵活地进行设置。近期
  • iQOO 11S评测:行业唯一的200W标准版旗舰

    iQOO 11S评测:行业唯一的200W标准版旗舰

    【Techweb评测】去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,该机不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞
  • OPPO K11采用全方位护眼屏:三大护眼能力减轻视觉疲劳

    OPPO K11采用全方位护眼屏:三大护眼能力减轻视觉疲劳

    日前OPPO官方宣布,全新的OPPO K11将于7月25日正式发布,将主打旗舰影像,和同档位竞品相比,其最大的卖点就是将配备索尼IMX890主摄,堪称是2000档位影像表
  • “买真退假” 这种“羊毛”不能薅

    “买真退假” 这种“羊毛”不能薅

    □ 法治日报 记者 王春   □ 本报通讯员 胡佳丽  2020年初,还在上大学的小东加入了一个大学生兼职QQ群。群主&ldquo;七王&rdquo;在群里介绍一些刷单赚
Top