maven 编译构建可以执行的jar包

2024-09-09 08:12
文章标签 maven 编译 构建 执行 jar

本文主要是介绍maven 编译构建可以执行的jar包,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


在这里插入图片描述
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
在这里插入图片描述

  • 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~

  • 专栏导航

    • Python系列: Python面试题合集,剑指大厂
    • Git系列: Git操作技巧
    • GO系列: 记录博主学习GO语言的笔记,该笔记专栏尽量写的试用所有入门GO语言的初学者
    • 数据库系列: 详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 运维系列: 总结好用的命令,高效开发
    • 算法与数据结构系列: 总结数据结构和算法,不同类型针对性训练,提升编程思维

    非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

    💖The Start💖点点关注,收藏不迷路💖

    📒文章目录

    • Maven 编译构建可以执行的 Jar 包
      • 一、项目结构
      • 二、POM.xml 配置详解
        • 1. 项目信息
        • 2. 项目属性
        • 3. 项目依赖
        • 4. 构建配置
          • 4.1 Maven 编译插件
          • 4.2 Maven 组装插件
      • 三、src.xml 配置详解
        • 组装配置
      • 四、构建可执行Jar包
      • 五、总结
      • 参考链接


Maven 编译构建可以执行的 Jar 包

在Java项目开发中,通过Maven进行项目构建和管理是一个非常普遍的选择。特别是当我们需要将项目打包成一个可以直接执行的Jar包时,Maven的能力显得尤为重要。本篇博文将结合一个实际的Maven配置实例,详细讲解如何通过Maven编译构建一个可以执行的Jar包。

一、项目结构

我们假设项目的目录结构如下:

demo/
├── pom.xml
└── src/└── main/└── resources/└── src.xml

二、POM.xml 配置详解

首先,我们来看一下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://www.maven.apache.org/POM/4.0.0 http://www.maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.storm</groupId><artifactId>demo</artifactId><version>v1</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding></properties><dependencies><!-- 引入第三方依赖包 --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.21</version></dependency><!-- 引入本地系统依赖包 --><dependency><groupId>com.hundsun</groupId><artifactId>h5sdk</artifactId><version>${project.version}</version><scope>system</scope><systemPath>${pom.basedir}/lib/自己本地的jar包.jar</systemPath></dependency></dependencies><build><!-- 配置插件 --><plugins><!-- 配置 Maven 编译插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><!-- 设置目标编译版本 --><target>${maven.compiler.source}</target><!-- 设置源代码版本 --><source>${maven.compiler.target}</source></configuration></plugin><!-- 配置 Maven 组装插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>2.4</version><configuration><archive><manifest><!-- 配置程序入口 --><addClasspath>true</addClasspath><mainClass>com.stormsha.demo.Main</mainClass></manifest><!-- 设置清单条目 --><manifestEntries><Class-Path>.</Class-Path></manifestEntries></archive><!-- 设置描述符引用 --><descriptorRefs><!-- 配置文件名后缀 --><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs><!-- 设置最终生成的文件名 --><finalName>demo</finalName><!-- 不附加汇编 ID,设置为false时一定得设置最终生成的文件名,不要问为什么,问就是不知道 --><appendAssemblyId>false</appendAssemblyId></configuration><!-- 插件执行配置 --><executions><execution><!-- 执行 ID --><id>make-assembly</id><!-- 执行阶段 --><phase>package</phase><!-- 执行目标 --><goals><goal>single</goal></goals><configuration><!-- 指定自定义描述符,如果你只有构建一个jar包,描述符的位置一定得在执行配置中,不要在插件配置中--><descriptors><descriptor>src/main/resources/src.xml</descriptor></descriptors></configuration></execution></executions></plugin></plugins></build><!-- 配置阿里云镜像作为默认镜像 --><repositories><repository><id>aliyun-apache-snapshots</id><url>https://maven.aliyun.com/repository/apache-snapshots</url><releases><enabled>false</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories>
</project>

1. 项目信息

在POM文件开头,我们定义了项目的基本信息,这些信息包括groupIdartifactIdversion。这些信息用于唯一标识项目。

2. 项目属性

<properties>标签中,我们定义了项目的编译和编码属性,包括Java编译版本和项目编码格式。

3. 项目依赖

<dependencies>标签中,我们引入了一个第三方依赖包hutool-all,以及一个本地系统依赖包h5sdk。值得注意的是,本地依赖包的scope设置为system,并且通过<systemPath>指定了本地依赖包的路径。

4. 构建配置

<build>标签中,我们定义了项目的插件配置,主要包括以下两部分:

4.1 Maven 编译插件

通过maven-compiler-plugin插件,我们指定了项目的目标编译版本和源代码版本。

4.2 Maven 组装插件

通过maven-assembly-plugin插件,我们可以将项目及其依赖打包成一个可执行的Jar包。主要配置项包括:

  • mainClass:指定程序入口类。
  • descriptorRef:配置文件名后缀。
  • finalName:设置最终生成的文件名。
  • 自定义描述符:指定自定义的描述符文件src/main/resources/src.xml

三、src.xml 配置详解

src.xml文件中,我们定义了组装Jar包的具体配置,如下:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"><!-- 定义组装 ID --><id>jar-with-dependencies</id><!-- 定义组装格式 --><formats><format>jar</format></formats><!-- 是否包含基础目录 --><includeBaseDirectory>false</includeBaseDirectory><!-- 定义依赖集 --><dependencySets><!-- 第一个依赖集 --><dependencySet><!-- 输出目录 --><outputDirectory>/</outputDirectory><!-- 是否使用项目的构件 --><useProjectArtifact>true</useProjectArtifact><!-- 是否解压依赖 --><unpack>true</unpack><!-- 依赖范围 --><scope>runtime</scope></dependencySet><!-- 第二个依赖集 --><dependencySet><!-- 输出目录 --><outputDirectory>/</outputDirectory><!-- 是否使用项目的构件 --><useProjectArtifact>true</useProjectArtifact><!-- 是否解压依赖 --><unpack>true</unpack><!-- 依赖范围 --><scope>system</scope></dependencySet></dependencySets>
</assembly>

组装配置

  • 通过<formats>标签定义了组装的格式为jar
  • 通过<dependencySets>标签定义了项目的依赖集,并指定了依赖的输出目录、使用项目的构件、解压依赖以及依赖的范围。

四、构建可执行Jar包

在配置完成后,我们可以通过以下命令进行项目的编译和打包:

mvn clean package

执行上述命令后,Maven会根据配置文件进行编译和打包,最终生成一个可执行的Jar包。你可以通过以下命令运行打包后的Jar文件:

java -jar target/demo.jar

五、总结

通过本文的讲解,我们了解了如何使用Maven进行项目的编译和打包,生成一个可执行的Jar包。主要涉及到的配置项包括项目的基本信息、依赖管理、编译插件和组装插件的配置等。希望本文对你在实际项目中使用Maven编译构建Jar包有所帮助。如果你有任何问题或建议,欢迎在评论区留言讨论。

参考链接

  • Maven官网
  • Hutool

感谢阅读,祝你编程愉快!


🔥🔥🔥道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

💖The End💖点点关注,收藏不迷路💖

这篇关于maven 编译构建可以执行的jar包的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1150624

相关文章

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

在MySQL执行UPDATE语句时遇到的错误1175的解决方案

《在MySQL执行UPDATE语句时遇到的错误1175的解决方案》MySQL安全更新模式(SafeUpdateMode)限制了UPDATE和DELETE操作,要求使用WHERE子句时必须基于主键或索引... mysql 中遇到的 Error Code: 1175 是由于启用了 安全更新模式(Safe Upd

springboot将lib和jar分离的操作方法

《springboot将lib和jar分离的操作方法》本文介绍了如何通过优化pom.xml配置来减小SpringBoot项目的jar包大小,主要通过使用spring-boot-maven-plugin... 遇到一个问题,就是每次maven package或者maven install后target中的ja

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

使用maven依赖详解

《使用maven依赖详解》本文主要介绍了Maven的基础知识,包括Maven的简介、仓库类型、常用命令、场景举例、指令总结、依赖范围、settings.xml说明等,同时,还详细讲解了Maven依赖的... 目录1. maven基础1.1 简介1.2 仓库类型1.3 常用命令1.4 场景举例1.5 指令总结

Spring Boot 整合 ShedLock 处理定时任务重复执行的问题小结

《SpringBoot整合ShedLock处理定时任务重复执行的问题小结》ShedLock是解决分布式系统中定时任务重复执行问题的Java库,通过在数据库中加锁,确保只有一个节点在指定时间执行... 目录前言什么是 ShedLock?ShedLock 的工作原理:定时任务重复执行China编程的问题使用 Shed

Linux部署jar包过程

《Linux部署jar包过程》文章介绍了在Linux系统上部署Java(jar)包时需要注意的几个关键点,包括统一JDK版本、添加打包插件、修改数据库密码以及正确执行jar包的方法... 目录linux部署jar包1.统一jdk版本2.打包插件依赖3.修改密码4.执行jar包总结Linux部署jar包部署

nginx-rtmp-module构建流媒体直播服务器实战指南

《nginx-rtmp-module构建流媒体直播服务器实战指南》本文主要介绍了nginx-rtmp-module构建流媒体直播服务器实战指南,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. RTMP协议介绍与应用RTMP协议的原理RTMP协议的应用RTMP与现代流媒体技术的关系2

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

SpringBoot项目中Maven剔除无用Jar引用的最佳实践

《SpringBoot项目中Maven剔除无用Jar引用的最佳实践》在SpringBoot项目开发中,Maven是最常用的构建工具之一,通过Maven,我们可以轻松地管理项目所需的依赖,而,... 目录1、引言2、Maven 依赖管理的基础概念2.1 什么是 Maven 依赖2.2 Maven 的依赖传递机