基于 IDEA 进行 Maven 工程构建

1. 构建概念和构建过程

项目构建是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程,在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。

项目构建是软件开发过程中至关重要的一部分,它能够大大提高软件开发效率,使得开发人员能够更加专注于应用程序的开发和维护,而不必关心应用程序的构建细节。

同时,项目构建还能够将多个开发人员的代码汇合到一起,并能够自动化项目的构建和部署,大大降低了项目的出错风险和提高开发效率。常见的构建工具包括 Maven、Gradle、Ant 等。

在这里插入图片描述

2. 命令方式项目构建

命令描述
mvn compile编译项目,生成target文件 (java 类编译为字节码文件)
mvn package打包项目,生成jar或war文件
mvn clean清理编译或打包后的项目结构
mvn install打包后上传到maven本地仓库
mvn deploy只打包,上传到maven私服仓库
mvn site生成站点
mvn test执行测试源码

2.1 mvn compile

现在 java 工程中创建一个 User 类
在这里插入图片描述

这里需要有 get、set 、toString 等方法,需要用到 lombok 这个 jar 包,来自动实现这些方法

访问 jar 包查询网站: https://mvnrepository.com/

搜索 lombok
在这里插入图片描述

选择一个使用较多的版本即可
在这里插入图片描述
在这里插入图片描述

将依赖放置在当前 java 工程的 pom.xml 中,刷新 maven
在这里插入图片描述

使用 lombok 的注解

@data:生成 get、set、toString 等方法
在这里插入图片描述

在这里插入图片描述

@AllArgsConstructor:生成有参构造方法
在这里插入图片描述

@NoArgsConstructor:生成无参构造
在这里插入图片描述

@Getter、@Setter:用于产生 get、set 方法

由于是通过命令行来执行,首先右键打开工程所在文件夹
在这里插入图片描述

进入到当前工程
在这里插入图片描述

mvn 相关的命令必须在 pom.xml 目录下使用,在地址栏输入 cmd 回车

在这里插入图片描述

从而直接定位到当前目录
在这里插入图片描述

这是由于利用 jenv 进行 JDK 版本管理时,在更换路径后,此路径没有 JDK 版本
在这里插入图片描述

因此需要在此路径下添加 JDK 版本:
在这里插入图片描述

再次执行就成功啦(其中会涉及到 maven 插件的使用,因为构建 maven 实际上就是在使用那些插件,maven-compiler-plugin:3.1:compile)
在这里插入图片描述

会看到产生了一个新目录 target,每次构建都会放在 target 目录中
在这里插入图片描述

字节码文件以 .class 为后缀
在这里插入图片描述

2.2 mvn clean

将之前编译的结果清理掉

在这里插入图片描述

2.3 mvn test

先在 maven 工程下面的 test/java 中创建一个 test 类,注意这个测试类的类名一定要以 Test 开头或者 Test 结尾
在这里插入图片描述

测试需要使用到 junit 这个依赖 jar 包

同理访问 jar 包查询网站: https://mvnrepository.com/

搜索 junit ,并选择最多的人的一个版本,添加到 pom.xml 中

在这里插入图片描述

在这里插入图片描述

通过 mvn test 命令即可执行 test 下的测试类
在这里插入图片描述

注: 可通过 mvn clean test,依次先执行 clean 再执行 test


测试报告
在这里插入图片描述
在这里插入图片描述

2.4 mvn package

打成 jar 包

注意命名是:maven 工程名 - maven 版本
在这里插入图片描述

在执行打包的过程中,会对核心功能和测试功能进行编译,测试不通过会导致打包失败

注意打包后的文件,是对核心代码进行代码,测试文件是没有打包的,因为测试是发生在打包之前,打包成功,说明测试没有问题。因此打包为 jar 包和 war 包都没有测试文件
在这里插入图片描述

下面对 web 工程打包为 war 包

在这里插入图片描述

进入到 web 工程的 pom.xml 文件下
在这里插入图片描述

如果报错,可能是war包打包插件和jdk版本不匹配:pom.xml 添加以下代码即可

<build><!-- jdk17 和 war包版本插件不匹配 --><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.2.2</version></plugin></plugins>
</build>

打包后文件
在这里插入图片描述

2.5 mvn install

如果想要使用自己的 maven 项目,就需要将其打包为 jar 包,比如在 maven_web 中使用 maven_java 这个工程。

首先在 maven_jave 工程的 pom.xml 中复制坐标,如下图
在这里插入图片描述

放入到 maven_web 工程的 pom.xml 的 depenence 标签中
在这里插入图片描述

这个时候 maven_java 作为一个 jar 包依赖,可以被 maven_web 所使用

下面对 maven_web 进行打包:发现报错了,报错原因是没有找到 maven_java 工程这个依赖
在这里插入图片描述

为什么呢?因为在 pom.xml 中设置都依赖首先会去本地仓库中寻找,没有会去中央仓库中寻找,而我们建立的 maven_java 工程即不在本地也不在中央仓库,因此报错。

因此,这个时候就要用到 mvn install ,将 jar 和 war 包安装到本地仓库,在 java 工程下,通过执行 mvn install 将这个工程 jar 包添加到本地仓库中。
在这里插入图片描述

这个时候再去 maven_web 进行打包,就可以打包成功啦
在这里插入图片描述

因此如果要使用自己的工程,首先需要将其 install 到自己的本地仓库中,否则是找不到的。

注意:打包(package)和安装(install)的区别是什么

打包是将工程打成jar或war文件,保存在target目录下

安装是将当前工程所生成的jar或war文件,安装到本地仓库,会按照坐标保存到指定位置

上述讲解了 jar 包通过 install 安装到本地仓库,具体安装到哪里呢?

先找到 maven_java 工程的坐标,然后一层一层去寻找
在这里插入图片描述
在这里插入图片描述
其所有的本地仓库的 jar 均均是如此,通过 pom.xml 中的坐标去寻找

3. 可视化方式项目构建

在这里插入图片描述

  • Lifecycle:生命周期
  • Plugins:插件
  • Dependences:工程依赖
    在这里插入图片描述

package:java 工程打 jar 包,web 工程打 war 包。

在这里插入图片描述

4. 构建插件、命令、生命周期命令之间关系

  • 构建生命周期

    我们发现一个情况!当我们执行package命令也会自动执行compile命令!

    [INFO] --------------------------------[ jar ]---------------------------------
    [INFO] 
    [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ mybatis-base-curd ---
    [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ mybatis-base-curd ---
    [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ mybatis-base-curd ---
    [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ mybatis-base-curd ---
    [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ mybatis-base-curd ---
    [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ mybatis-base-curd ---
    [INFO] Building jar: D:\javaprojects\backend-engineering\part03-mybatis\mybatis-base-curd\target\mybatis-base-curd-1.0-SNAPSHOT.jar
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  5.013 s
    [INFO] Finished at: 2023-06-05T10:03:47+08:00
    [INFO] ------------------------------------------------------------------------
    

    这种行为就是因为构建生命周期产生的!构建生命周期可以理解成是一组固定构建命令的有序集合,触发周期后的命令,会自动触发周期前的命令!!!

    构建周期作用:会简化构建过程

    例如:项目打包 mvn clean package即可。

    主要两个构建生命周期:

    • 清理周期:主要是对项目编译生成文件进行清理

      包含命令:clean

  • 默认周期:定义了真正构件时所需要执行的所有步骤,它是生命周期中最核心的部分

    包含命令:compile -  test - package - install - deploy
    
  • 插件、命令、周期三者关系(了解)

    周期→包含若干命令→包含若干插件

    使用周期命令构建,简化构建过程!

    最终进行构建的是插件!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/423153.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis 面试题 | 05.精选Redis高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

PowerShell install 一键部署grafana

grafana 前言 Grafana 是一款开源的数据可视化和监控仪表盘工具。它提供了丰富的数据查询、可视化和报警功能,可用于实时监控、数据分析和故障排除等领域。 通过 Grafana,您可以连接到各种不同的数据源,包括时序数据库(如 Prometheus、InfluxDB)和关系型数据库(如 MySQ…

使用DTS实现TiDB到GaiaDB数据迁移

1 概览 本文主要介绍通过 DTS 数据迁移功能&#xff0c;结合消息服务 for Kafka 与 TiDB 数据库的 Pump、Drainer 组件&#xff0c;完成从TiDB迁移至百度智能云云原生数据库 GaiaDB。 消息服务 for Kafka&#xff1a;详细介绍参见&#xff1a;消息服务 for Kafka 产品介绍百度智…

Elasticsearch:介绍 kNN query,这是进行 kNN 搜索的专家方法

作者&#xff1a;来自 Elastic Mayya Sharipova, Benjamin Trent 当前状况&#xff1a;kNN 搜索作为顶层部分 Elasticsearch 中的 kNN 搜索被组织为搜索请求的顶层&#xff08;top level&#xff09;部分。 我们这样设计是为了&#xff1a; 无论分片数量多少&#xff0c;它总…

EHS管理系统为何需要物联网的加持?

EHS是Environment、Health、Safety的缩写&#xff0c;是从欧美企业引进的管理体系&#xff0c;在国外也被称为HSE。EHS是指健康、安全与环境一体化的管理。 而在国内&#xff0c;整个EHS市场一共被分成三类&#xff1b; 一类是EHS管培体系&#xff0c;由专门的EHS机构去为公司…

二维码地址门牌管理系统:社区新风向

文章目录 前言一、集成先进技术的系统二、便捷居民体验三、支持社区管理四、未来展望与可扩展性 前言 随着科技的不断发展&#xff0c;智能化管理已经深入到我们的生活中。二维码门牌管理系统作为一款创新产品&#xff0c;在社区管理领域迅速引起广泛关注。这款系统不仅提升了…

一、认识 JVM 规范(JVM 概述、字节码指令集、Class文件解析、ASM)

1. JVM 概述 JVM&#xff1a;Java Virtual Machine&#xff0c;也就是 Java 虚拟机 所谓虚拟机是指&#xff1a;通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的计算机系统。 即&#xff1a;虚拟机是一个计算机系统。这种计算机系统运行在完全隔离的环境中…

新书速览|MediaPipe机器学习跨平台框架实战

MediaPipe助你高效构建移动端短视频应用。MediaPipe、机器学习、短视频应用、视频特效、游戏控制 本书内容 《MediaPipe机器学习跨平台框架实战》以实际项目为线索&#xff0c;带领读者探索MediaPipe在不同场景中的应用&#xff0c;使读者既能了解理论知识&#xff0c;又能通过…

VisualSVN Server下载安装和使用方法、服务器搭建、使用TortoiseSvn将项目上传到云端服务器、各种错误解决方法

VisualSVN Server下载安装和使用方法、服务器搭建、使用TortoiseSvn将项目上传到云端服务器、各种错误解决方法 0.写在前面00.电脑配置01.思路 1.VisualSVN Server下载安装01.下载02.安装03.电脑命名不能有中文04.制作VisualSVN Server快捷方式05.License limits exceeded, Som…

HarmonyOS 发送http网络请求

好 本文 我们来说 http请求 首先 我们要操作网络内容 需要申请权限 项目中找到 main目录下的module.json5 最下面加上 "requestPermissions": [{"name": "ohos.permission.INTERNET"} ]这里 我在本地写了一个get接口 大家可以想办法 弄一个后…

RK3568平台 TinyAlsa集成第三方音频算法

一.tinyalsa介绍 ALSA&#xff08;Advanced Linux Sound Architecture&#xff09;是一个开源项目&#xff0c;涵盖了用户空间和内核空间对音频设备的操作接口&#xff0c;通过应用层使用alsalib可以实现对音频设备的控制 TinyAlsa是android推出的一个精简的ALSA库&#xff0c…

R语言批量把数值变量和因子变量的互转

#我们以rms包的lung数据集为例 library(rms) data<-lung #这里有两种方法&#xff0c; #第1是知道需要转化的变量在哪几列&#xff1b; #第2知道需要转化的变量名 str(data) #假设我们想转化inst/status/sex/三个变量的类型 #图1先看看变量类型和处于第几列 str(dat…