Maven笔记(一):基础使用【记录】
Maven笔记(一)-基础使用
Maven是专门用于管理和构建Java项目的工具,它的主要功能有:
- 提供了一套标准化的项目结构
Maven提供了一套标准化的项目结构,所有IDE(eclipse、myeclipse、IntelliJ IDEA 等 项目开发工具) 使用Maven构建的项目结构完全一样,所有IDE创建的Maven项目可以通用。
- 提供了一套标准化的构建流程(编译,测试,打包,发布……)
- 提供了一套依赖管理机制
依赖管理其实就是管理你项目所依赖的第三方资源 (jar包、插件…)
- 以前的操作流程: 需要手动去导入jar包,过程非常繁琐
- 使用Maven管理jar包:
Maven 使用标准的坐标配置来管理各种依赖,只需要简单的配置就可以完成依赖管理
常见的项目构建工具使用占比情况:
一、Maven简介
官网:https://maven.apache.org/
Maven是一款自动化构建工具,专注服务于Java平台的项目构建和依赖管理。它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。
1.1 Maven模型
- 项目对象模型
每个项目在 pom.xml 文件中都有自己的唯一标识。
- 依赖管理模型
- 插件(plugin)
打包插件、编译插件…
1.2 Maven仓库
- 仓库的分类:
本地仓库:自己计算机上的一个目录
中央仓库:由Maven团队维护的全球开源唯一的仓库,地址:https://repo1.maven.org/maven2/
远程仓库(私服):一般由公司团队搭建的私有仓库,存放一些含有版权的Jar
当项目中 pom.xml 使用坐标引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包,如果有,则在项目直接引用;如果没有,则去中央仓库中下载对应的jar包到本地仓库。
还可以搭建远程仓库,将来jar包的查找顺序则变为:本地仓库 -> 远程仓库 -> 中央仓库
二、Maven安装配置
Maven安装直接进入官网进行下载(下载地址:http://maven.apache.org),选择zip格式的压缩文件,解压后即可使用。
解压出来之后的Maven工具目录结构如下:
2.1 配置Maven环境变量
- 环境变量设置中的 系统变量中添加MAVEN_HOME
- 在系统变量里的Path变量内部添加MAVE_HOME
- 打开CMD终端测试配置情况
命令:mvn -version
2.2 配置Maven 本地仓库
修改 Maven 工具目录下面的** conf/settings.xml**文件中的 ****标签内容。为 标签指定目录文件夹,用于存放依赖。
注:Maven本地仓库在配置前都会有一个默认仓库地址C:/用户/super/.m2/repository
。默认仓库地址是在C盘下,所有这里建议调整一下。
2.3 配置阿里云私服
私服的配置是为了提高项目中jar包的下载速度,阿里云私服对于中央仓库来说下载速度更快。
修改 Maven 工具目录下面的** conf/settings.xml**文件中的 ** **标签内容。
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf>
</mirror>
三、Maven基本使用
3.1 Maven的常用命令
**PS:**这里简单的创建了一个Mavn项目,然后通过执行下面命令查看执行效果:
- MavenTest类中代码
package org.myself;public class MavenTest {public static void main(String[] args) {System.out.println("Hello World ~~!");}
}
- TestMaven :test文件夹下的测试类代码
package org.myself;
import org.junit.Test;
public class TestMaven {@Testpublic void testAAA(){System.out.println("======== Maven test 执行~!========");}
}
- 项目中 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://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.myself</groupId><artifactId>maven_demo</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.1</version><scope>test</scope></dependency><!-- 导入依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.20</version></dependency></dependencies><properties><java.version>1.8</java.version><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.10</version><configuration><!--<includes><include>**\*</include></includes>--><!--<skipTests>true</skipTests>--></configuration></plugin></plugins></build></project>
执行命令时,需要cmd到对应项目中 pom.xml 所在目录下进行命令操作
在Maven项目目录下( pom.xml 文件所在目录层级中),进入cmd命令终端,然后执行下列命令。
mvn compile
编译命令
在项目目录下,执行 mvn compile 命令后会对项目进行编译操作,首先Maven工具会去自动下载需要用到的编译插件。然后会在私服/中央仓库中 下载 pom.xml 文件中所依赖jar 到本地仓库中。
编译完成之后,项目文件夹中会增加一个 target 文件目录,该文件中就存放了当前项目编译后的 java.class 字节码文件。
mvn clean
清理
清理命令主要作用是用来删除 执行编译命令 mvn compile时所生成的 target文件。同时Maven也会自动去下载一些clean插件。
mvn test
测试
用于执行项目中 test文件目录下的 Java 测试代码,会在控制台中对应输出测试类中的打印数据。
mvn package
打包命令
主要作用是将项目代码编译成class文件,然后打包生成对应的jar包 (java项目打成jar包 / Web项目打成war包 [后续介绍]),项目目录中同样会生成一个 target文件目录,该target文件中就存放了打包生成的jar文件。
同样执行命令时,Maven会自动下载打包所需要的插件。
mvn install
安装
命令作用是将当前项目,安装到本地仓库中,然后本地仓库中就会对应生成该项目的jar包。
3.2 Maven的生命周期
Maven 构建项目生命周期描述的是一次构建过程经历经历了多少个事件
Maven对项目构建的生命周期划分为3套,分别为 clean、default、site:
- clean:清理工作
- default:核心工作
例如编译、测试、打包、安装等。
- site:产生报告,发布站点等
同一生命周期内,执行后边的命令,前边的所有命令会自动执行。
default 构建生命周期 (除了几个常用命令,其余大部分命令都很少使用到)
- validate(校验):校验项目是否正确并且所有必要的信息可以完成项目的构建过程。
- initialize(初始化):初始化构建状态,比如设置属性值。
- generate-sources(生成源代码):生成包含在编译阶段中的任何源代码。
- process-sources(处理源代码):处理源代码,比如说,过滤任意值。
- generate-resources(生成资源文件):生成将会包含在项目包中的资源文件。
- process-resources (处理资源文件):复制和处理资源到目标目录,为打包阶段最好准备。
- compile(编译):编译项目的源代码。
- process-classes(处理类文件):处理编译生成的文件,比如说对Java class文件做字节码改善优化。
- generate-test-sources(生成测试源代码):生成包含在编译阶段中的任何测试源代码。
- process-test-sources(处理测试源代码):处理测试源代码,比如说,过滤任意值。
- generate-test-resources(生成测试资源文件):测试创建资源文件。
- process-test-resources(处理测试资源文件):复制和处理测试资源到目标目录。
- test-compile(编译测试源码):编译测试源代码到测试目标目录.
- process-test-classes(处理测试类文件):处理测试源码编译生成的文件。
- test(测试):使用合适的单元测试框架运行测试(Juint是其中之一)。
- prepare-package(准备打包):在实际打包之前,执行任何的必要的操作为打包做准备。
- **package(打包):**将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件。
- pre-integration-test(集成测试前):在执行集成测试前进行必要的动作。比如说,搭建需要的环境。
- integration-test(集成测试):处理和部署项目到可以运行集成测试环境中。
- post-integration-test(集成测试后):在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。
- verify (验证):运行任意的检查来验证项目包有效且达到质量标准。
- install(安装):安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。
- deploy(部署):将最终的项目包复制到远程仓库中与其他开发者和项目共享。
四、IDEA 配置 Maven
- 选择 IDEA 中 File --> Settings
- 搜索 maven( 在Build… -> Build Tools -> Maven 中设置)
- 设置IDEA 使用本地安装的maven,并修改配置文件路径
4.1 Maven坐标
Maven坐标上资源的唯一标识,使用坐标来定义项目或者引入项目中需要的依赖。
- Maven 坐标的主要成分
- groupId:定义当前Maven项目隶属组织名称(通常是域名反写 eg:com.item)
- artifactId:定义当前Maven项目名称(通常是模块名称 eg:order-server、goods-server)
- version:定义当前项目版本号
eg:项目定义坐标
eg:项目引入坐标
4.2 Maven项目中打印输出乱码解决方案
- Help --> Edit Custom Vm Options 中添加 Dfile.encoding = utf-8
- File --> Settings --> File Encodings 中的三个选项设置为 UtF-8
- File --> Setting --> Runner 中的 VM Options 设置为:-Dfile.encoding=GB2312
五、Maven 依赖管理
5.1 使用坐标导入jar
5.1.1 使用坐标导入jar包
- 中 pom.xml 中编写 标签
- 在 标签中使用 引入坐标
- 定义坐标的 groupId, artifactId,version
- 点击刷新按钮,使坐标生效
5.1.2 使用坐标导入jar包 - 快捷方式
- 中 pom.xml 中 按 alt + insert ,选择 Dependency
- 中弹出的面板中搜索对应坐标,然后双击选中对应坐标
- 点击刷新按钮,使坐标生效
5.1.3 自动导入设置,不需要中每次都进行手动刷新
- 选择 IDEA 中 File --> Settings
- 中弹出的面板中点击 Build Tools
- 选择 Any changes ,点击ok即可生效
5.2 依赖范围
通过设置坐标的范围(scope),可以设置对应 jar 包的作用范围: 编译环境、测试环境、运行环境
依赖范围 | 编译classpath | 测试classpath | 运行classpath | 例子 |
---|---|---|---|---|
compile | Y | Y | Y | logback |
test | - | Y | - | Junit |
provided | Y | Y | - | servlet-api |
runtime | - | Y | Y | jdbc驱动 |
system | Y | Y | - | 存储中本地的jar |
impotr | 引入 DependencyManagement |
相关文章:

Maven笔记(一):基础使用【记录】
Maven笔记(一)-基础使用 Maven是专门用于管理和构建Java项目的工具,它的主要功能有: 提供了一套标准化的项目结构 Maven提供了一套标准化的项目结构,所有IDE(eclipse、myeclipse、IntelliJ IDEA 等 项目开发工具) 使…...

[vulnhub] Jarbas-Jenkins
靶机链接 https://www.vulnhub.com/entry/jarbas-1,232/ 主机发现端口扫描 扫描网段存活主机,因为主机是我最后添加的,所以靶机地址是135的 nmap -sP 192.168.75.0/24 // Starting Nmap 7.93 ( https://nmap.org ) at 2024-09-21 14:03 CST Nmap scan…...
js设计模式(26)
js设计模式(26) JavaScript 中常用的设计模式可以分为几大类,包括创建型模式、结构型模式和行为型模式。以下是它们的分类和常见设计模式的完整列表: 一、创建型模式 这些模式主要关注对象的创建方式,目的是降低系统耦合和复杂性。 工厂模…...
数据库中, drop、delete与truncate的区别?
在数据库中,drop、delete和truncate都可以用于删除数据,但它们之间有以下区别: 一、作用对象 drop:可以删除数据库对象,如表、视图、索引、存储过程等。例如:DROP TABLE table_name;可以删除名为 table_na…...

2024年项目经理不能错过的开源项目管理系统大盘点:全面指南
在2024年,随着项目管理领域的不断发展,开源项目管理系统成为了项目经理们提升工作效率的利器。本文将全面盘点几款备受推荐的开源项目管理系统,帮助项目经理们找到最佳选择,不容错过。 在项目管理日益复杂的今天,开源项…...

MATLAB基本语句
MATLAB语言为解释型程序设计语言。在程序中可以出现顺序、选择、循环三种基本控制结构,也可以出现对M-文件的调用(相当于对外部过程的调用)。 由于 MATLAB开始是用FORTRAN语言编写、后来用 C语言重写的,故其既有FORTRAN的特征,又在许多语言规…...

委托的注册及注销+观察者模式
事件 委托变量如果公开出去,很不安全,外部可以随意调用 所以取消public,封闭它,我们可以自己书写两个方法,供外部注册与注销,委托调用在子方法里调用,这样封装委托变量可以使它更安全,这个就叫…...

Jetpack02-LiveData 数据驱动UI更新(类似EventBus)
前提 LiveData使用了Lifecycle的生命周期,阅读本文前,请先了解Lifecycle源码。 简介 LiveData本质是数据类型,当改变数据的时候,会通知观察者,且只在界面可见的时候才会通知观察者。只能在主线程注册观察者…...

Redis 的 Java 客户端有哪些?官方推荐哪个?
Redis 官网展示的 Java 客户端如下图所示,其中官方推荐的是标星的3个:Jedis、Redisson 和 lettuce。 Redis 的 Java 客户端中,Jedis、Lettuce 和 Redisson 是最常用的三种。以下是它们的详细比较: Jedis: 线程安全&…...
工作笔记20240927——vscode + jlink调试
launch.json的配置,可以用的 {"name": "Debug","type": "cppdbg","request": "launch","miDebuggerPath": "./arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin/arm-none-eabi-g…...

Python | Leetcode Python题解之第433题最小基因变化
题目: 题解: class Solution:def minMutation(self, start: str, end: str, bank: List[str]) -> int:if start end:return 0def diffOne(s: str, t: str) -> bool:return sum(x ! y for x, y in zip(s, t)) 1m len(bank)adj [[] for _ in ra…...
opengauss使用遇到的问题,随时更新
一、查看数据库状态的方式 1、gs_ctl -D /opt/huawei/install/data/dn/ status 2、gs_om -t status --detail 3、cm_ctl query -Cv二、opengauss打印WDR性能报告 1、开启WDR性能参数开关 gs_guc reload -N all -D /opt/huawei/install/data/dn -c "enable_wdr_snap…...

从环境部署到开发实战:消息队列 RocketMQ
文章目录 一、消息队列简介1.1 什么是消息队列1.2 常见消息队列对比1.3 RockectMQ 核心概念1.4 RockectMQ 工作机制 (★) 二、RocketMQ 部署相关2.1 服务器单机部署2.2 管控台页面 三、RocketMQ 的基本使用3.1 入门案例3.2 消息发送方式3.2.1 同步消息3.…...

【机器学习(九)】分类和回归任务-多层感知机(Multilayer Perceptron,MLP)算法-Sentosa_DSML社区版
文章目录 一、算法概念二、算法原理(一)感知机(二)多层感知机1、隐藏层2、激活函数sigma函数tanh函数ReLU函数 3、反向传播算法 三、算法优缺点(一)优点(二)缺点 四、MLP分类任务实现…...

渗透测试-文件上传绕过思路
文件上传绕过思路 引言 分享一些文件上传绕过的思路,下文内容多包含实战图片,所以打码会非常严重,可多看文字表达;本文仅用于交流学习, 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#x…...
等保测评中的密码学应用分析
等保测评中密码学应用的分析 等保测评(信息安全等级保护测评)是中国信息安全领域的一项重要活动,旨在评估信息系统的安全性,并根据评估结果给予相应的安全等级。在等保测评中,密码学应用分析是评估信息系统安全性的关键…...
LCR 007. 三数之和
文章目录 1.题目2.思路3.代码 1.题目 LCR 007. 三数之和 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a ,b ,c *,*使得 a b c 0 ?请找出所有和为 0 且 不重复 的三元组。 示例 1:…...

【入门01】arcgis api 4.x 创建地图、添加图层、添加指北针、比例尺、图例、卷帘、图层控制、家控件(附完整源码)
1.效果 2.代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title></title><link rel"s…...
STL迭代器标签
STL(标准模板库)迭代器标签是用来标识迭代器类型的分类机制。这些标签有助于确定迭代器的特性,比如它是否可以进行随机访问、是否支持修改元素等。主要的迭代器标签包括: Input Iterator:只读迭代器,可以顺…...
容器学习之SparseArray源码解析
1、SparseArray是android sdk 提供集合类,主要用来替换key 为int类型,value为Object类型的Hashmap 2、SparseArray和HashMap相比优缺点: 优点: 1、SparseArray存在一个int[]keys, 因此避免自动装箱 2、SparseArray扩容时只需要数…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...

DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...