基于 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 -
插件、命令、周期三者关系(了解)
周期→包含若干命令→包含若干插件
使用周期命令构建,简化构建过程!
最终进行构建的是插件!
相关文章:
基于 IDEA 进行 Maven 工程构建
1. 构建概念和构建过程 项目构建是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程,在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。 项目构建是软件开发过程中至关重要的一部分,它能够大大提高软件开发效率&am…...
牛客周赛 Round 17 解题报告 | 珂学家 | 枚举贪心 + 二分最短路
前言 整体评价 其实T3最有意思, T4很典,是一道二分最短路径经典套路。 T3 如果尝试 增量差值最小 的最大梯度去贪心的话,会失败,需要切换思路。 珂朵莉 牛客周赛专栏 珂朵莉 牛客小白月赛专栏 A. 游游的正方形披萨 如果横竖差…...
喝口水都长胖?原来是“胖菌”惹的祸?!
减肥是一个永恒的话题,而关于长胖的原因,已有研究很多都聚焦在肥胖人群中肠道菌群的种类和丰度,很少有研究关注肠道微生物的基因与宿主肥胖的关系。近期发表在《Nature Medicine》的这项研究,使用来GWAS研究人类肠道微生物组与宿主…...
【C++干货基地】namespace超越C语言的独特魅力(文末送书)
🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 哈喽各位铁汁们好啊,我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发,不知道各位的…...
做一个简单的倒计时
<div>距离过年还有:<span></span></div><script>let div document.querySelector("div");let span document.querySelector("span");// 获取未来时间戳let future new Date("2024-2-10 00:00:00");// 获取当下…...
微服务环境搭建:docker+nacos单机
nacos需要连接mysql,持久化相关配置。 1. 部署好mysql后,新建nacos数据库然后初始化nacos脚本 -- -------------------------------------------------------- -- 主机: 192.168.150.101 -- 服务器版本: …...
Opencv轮廓检测运用与理解
目录 引入 基本理解 加深理解 ①比如我们可以获取我们的第一个轮廓,只展示第一个轮廓 ②我们还可以用一个矩形把我们的轮廓给框出来 ③计算轮廓的周长和面积 引入 顾名思义,就是把我们图片的轮廓全部都描边出来 也就是我们在日常生活中面部识别的时候会有一个框,那玩意就…...
Java 8的新特性简单分享(后续有系列篇~敬请期待)
Java 8的新特性分享 Java 8是Java语言迎来的一次革命性的更新,引入了众多强大的新特性,使得Java开发变得更加现代化和便捷。在这篇博客中,我们将深入探讨Java 8的一些主要特性,并通过丰富的案例演示展示它们的用法。 1. Lambda表…...
计算机网络-计算机网络的概念 功能 发展阶段 组成 分类
文章目录 计算机网络的概念 功能 发展阶段总览计算机网络的概念计算机网络的功能计算机网络的发展计算机网络的发展-第一阶段计算机网络的发展-第二阶段-第三阶段计算机网络的发展-第三阶段-多层次ISP结构 小结 计算机网络的组成与分类计算机网络的组成计算机网络的分类小结 计…...
246.【2023年华为OD机试真题(C卷)】分月饼(动态规划-JavaPythonC++JS实现)
🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-分月饼二.解题思路三.题解代码Python题解代码J…...
java大数据hadoop2.9.2 Linux安装mariadb和hive
一、安装mariadb 版本centos7 1、检查Linux服务器是否已安装mariadb yum list installed mariadb* 2、如果安装了,想要卸载 yum remove mariadb rm -rf /etc/my.cnf rm -rf /var/lib/mysql 才能完全删除 3、安装mariadb 在线网络安装 yum install -y mari…...
Docker部署微服务问题及解决
👨🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:Docker容器命令案例:Nginx容器修改,Redis容器持久化 📚订阅专栏:Docker 希望文章…...
Android: alarm定时很短时,比如500ms,测试执行mPowerManager.forceSuspend()后,系统不会suspend
参考文档: https://blog.csdn.net/weixin_35691921/article/details/124961404 Android: alarm定时很短时,比如500ms,然后执行mPowerManager.forceSuspend()后,系统不会suspend,原因分析: static int ala…...
一个简单好用的C语言单元测试框架-Unity
Unity简介: Unity是一个用于C语言的轻量级单元测试框架。它由Throw The Switch团队开发,旨在简化嵌入式系统的单元测试。单元测试中单元的含义,单元就是人为规定的最小的被测功能模块,如C语言中单元指一个函数,Java里…...
ubuntu系统 vscode 配置c/c++调试环境
文章目录 1.安装插件2.目录结构3.cmake tools配置 1.安装插件 c/c插件 cmake cmake tools插件 2.目录结构 . ├── build ├── CMakeLists.txt ├── demo │ └── main.cpp ├── image.png ├── src │ ├── add.cpp │ └── add.hpp └── vsdebug.…...
算法练习-A+B/财务管理/实现四舍五入/牛牛的菱形字符(题目链接+题解打卡)
难度参考 难度:简单 分类:熟悉OJ与IDE的操作 难度与分类由我所参与的培训课程提供,但需要注意的是,难度与分类仅供参考。以下内容均为个人笔记,旨在督促自己认真学习。 题目 A B1. A B - AcWing题库财务管理1004:财…...
XSS语句
XSS测试语句 在测试网站是否存在XSS漏洞时,应该输入一些标签如<,>输入后查看网页源代码是否过滤标签,如果没过滤,很大可能存在XSS漏洞。 <h5>1</h5> <span>1</span> <SCRIPT>alert(document.cookie)&l…...
AD导出BOM表 导出PDF
1.Simple BOM: 这种模式下,最好在pcb界面,这样的导出的文件名字是工程名字,要是在原理图界面导出,会以原理图的名字命名表格。 直接在菜单栏 报告->Simple BOM 即可导出物料清单,默认导出 comment pattern qu…...
linux 的nobody是什么用户? 对安全有没有影响?
目 录 一、前言:nobody是不是可疑用户? 二、Linux系统中的nobody用户? 二、有nobody用户存在,安全吗? 一、前言:nobody是不是可疑用户? 在前面一篇文章“Linux安全问题,如何查看哪…...
2024年华数杯国际数学建模B 光伏电(Problem B: Photovoltaic Power)完整思路以及源代码分享
背景 中国的电力构成包括传统的能源发电(如煤炭、石油和天然气)、可再生能源发电 (如水力发电、风能、太阳能和核能)和其他形式的电力。这些发电方式在满足中 国巨大的电力需求方面发挥着至关重要的作用。根据最新数据…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...
【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析
1. 元器件定义与技术特点 TPS54618CQRTERQ1 是德州仪器(TI)推出的一款 汽车级同步降压转换器(DC-DC开关稳压器),属于高性能电源管理芯片。核心特性包括: 输入电压范围:2.95V–6V,输…...
