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

相关文章

每天认识几个maven依赖(ActiveMQ+activemq-jaxb+activesoap+activespace+adarwin)

八、ActiveMQ 1、是什么? ActiveMQ 是一个开源的消息中间件(Message Broker),由 Apache 软件基金会开发和维护。它实现了 Java 消息服务(Java Message Service, JMS)规范,并支持多种消息传递协议,包括 AMQP、MQTT 和 OpenWire 等。 2、有什么用? 可靠性:ActiveMQ 提供了消息持久性和事务支持,确保消

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建      首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件、动态链接库文件、可执行文件、脚本文件、配置文件等。      我们在编写hellowor

利用命令模式构建高效的手游后端架构

在现代手游开发中,后端架构的设计对于支持高并发、快速迭代和复杂游戏逻辑至关重要。命令模式作为一种行为设计模式,可以有效地解耦请求的发起者与接收者,提升系统的可维护性和扩展性。本文将深入探讨如何利用命令模式构建一个强大且灵活的手游后端架构。 1. 命令模式的概念与优势 命令模式通过将请求封装为对象,使得请求的发起者和接收者之间的耦合度降低。这种模式的主要优势包括: 解耦请求发起者与处理者

Maven(插件配置和生命周期的绑定)

1.这篇文章很好,介绍的maven插件的。 2.maven的source插件为例,可以把源代码打成包。 Goals Overview就可以查看该插件下面所有的目标。 这里我们要使用的是source:jar-no-fork。 3.查看source插件的example,然后配置到riil-collect.xml中。  <build>   <plugins>    <pl

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令 在日常的工作中由于各种原因,会出现这样一种情况,某些项目并没有打包至mvnrepository。如果采用原始直接打包放到lib目录的方式进行处理,便对项目的管理带来一些不必要的麻烦。例如版本升级后需要重新打包并,替换原有jar包等等一些额外的工作量和麻烦。为了避免这些不必要的麻烦,通常我们