当前位置: 首页 > article >正文

Maven笔记(一):基础使用【记录】

Maven笔记(一)-基础使用

Maven是专门用于管理和构建Java项目的工具,它的主要功能有:

  • 提供了一套标准化的项目结构

Maven提供了一套标准化的项目结构,所有IDE(eclipse、myeclipse、IntelliJ IDEA 等 项目开发工具) 使用Maven构建的项目结构完全一样,所有IDE创建的Maven项目可以通用。
image.png

  • 提供了一套标准化的构建流程(编译,测试,打包,发布……)

image.png

  • 提供了一套依赖管理机制

依赖管理其实就是管理你项目所依赖的第三方资源 (jar包、插件…)

  • 以前的操作流程: 需要手动去导入jar包,过程非常繁琐image.png
  • 使用Maven管理jar包:

Maven 使用标准的坐标配置来管理各种依赖,只需要简单的配置就可以完成依赖管理
image.png

常见的项目构建工具使用占比情况:
image.png

一、Maven简介

官网:https://maven.apache.org/
Maven是一款自动化构建工具,专注服务于Java平台的项目构建依赖管理。它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。

1.1 Maven模型

image.png

  • 项目对象模型

每个项目在 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工具目录结构如下:
image.png

2.1 配置Maven环境变量

  • 环境变量设置中的 系统变量中添加MAVEN_HOMEimage.png
  • 在系统变量里的Path变量内部添加MAVE_HOME

image.png

  • 打开CMD终端测试配置情况

命令:mvn -version
image.png

2.2 配置Maven 本地仓库

修改 Maven 工具目录下面的** conf/settings.xml**文件中的 ****标签内容。为 标签指定目录文件夹,用于存放依赖。
image.png
注:Maven本地仓库在配置前都会有一个默认仓库地址C:/用户/super/.m2/repository。默认仓库地址是在C盘下,所有这里建议调整一下。

2.3 配置阿里云私服

私服的配置是为了提高项目中jar包的下载速度,阿里云私服对于中央仓库来说下载速度更快。
修改 Maven 工具目录下面的** conf/settings.xml**文件中的 ** **标签内容。
image.png

<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项目,然后通过执行下面命令查看执行效果:
image.png

  • 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 {
    @Test
    public 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 到本地仓库中。
image.png
编译完成之后,项目文件夹中会增加一个 target 文件目录,该文件中就存放了当前项目编译后的 java.class 字节码文件。

  • mvn clean 清理

清理命令主要作用是用来删除 执行编译命令 mvn compile时所生成的 target文件。同时Maven也会自动去下载一些clean插件。
image.png

  • mvn test 测试

用于执行项目中 test文件目录下的 Java 测试代码,会在控制台中对应输出测试类中的打印数据。
image.png

  • mvn package 打包命令

主要作用是将项目代码编译成class文件,然后打包生成对应的jar包 (java项目打成jar包 / Web项目打成war包 [后续介绍]),项目目录中同样会生成一个 target文件目录,该target文件中就存放了打包生成的jar文件。
同样执行命令时,Maven会自动下载打包所需要的插件。
image.png

  • mvn install 安装

命令作用是将当前项目,安装到本地仓库中,然后本地仓库中就会对应生成该项目的jar包。
image.png
image.png

3.2 Maven的生命周期

Maven 构建项目生命周期描述的是一次构建过程经历经历了多少个事件
Maven对项目构建的生命周期划分为3套,分别为 clean、default、site:

  • clean:清理工作

image.png

  • default:核心工作

例如编译、测试、打包、安装等。
image.png

  • site:产生报告,发布站点等

image.png

同一生命周期内,执行后边的命令,前边的所有命令会自动执行。


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

  1. 选择 IDEA 中 File --> Settings
  2. 搜索 maven( 在Build… -> Build Tools -> Maven 中设置)
  3. 设置IDEA 使用本地安装的maven,并修改配置文件路径

image.png

4.1 Maven坐标

Maven坐标上资源的唯一标识,使用坐标来定义项目或者引入项目中需要的依赖。

  • Maven 坐标的主要成分
  1. groupId:定义当前Maven项目隶属组织名称(通常是域名反写 eg:com.item)
  2. artifactId:定义当前Maven项目名称(通常是模块名称 eg:order-server、goods-server)
  3. version:定义当前项目版本号

eg:项目定义坐标
image.png

eg:项目引入坐标
image.png

4.2 Maven项目中打印输出乱码解决方案

  • Help --> Edit Custom Vm Options 中添加 Dfile.encoding = utf-8

image.png

  • File --> Settings --> File Encodings 中的三个选项设置为 UtF-8

image.png

  • File --> Setting --> Runner 中的 VM Options 设置为:-Dfile.encoding=GB2312

image.png

五、Maven 依赖管理

5.1 使用坐标导入jar

5.1.1 使用坐标导入jar包

  1. 中 pom.xml 中编写 标签
  2. 在 标签中使用 引入坐标
  3. 定义坐标的 groupId, artifactId,version
  4. 点击刷新按钮,使坐标生效

image.png

5.1.2 使用坐标导入jar包 - 快捷方式

  1. 中 pom.xml 中 按 alt + insert ,选择 Dependency

image.png

  1. 中弹出的面板中搜索对应坐标,然后双击选中对应坐标

image.png

  1. 点击刷新按钮,使坐标生效

5.1.3 自动导入设置,不需要中每次都进行手动刷新

  1. 选择 IDEA 中 File --> Settings
  2. 中弹出的面板中点击 Build Tools
  3. 选择 Any changes ,点击ok即可生效

image.png

5.2 依赖范围

通过设置坐标的范围(scope),可以设置对应 jar 包的作用范围: 编译环境、测试环境、运行环境
image.png

依赖范围编译classpath测试classpath运行classpath例子
compileYYYlogback
test-Y-Junit
providedYY-servlet-api
runtime-YYjdbc驱动
systemYY-存储中本地的jar
impotr引入 DependencyManagement

http://www.kler.cn/news/317089.html

相关文章:

  • Spring Boot 中的拦截器 Interceptors
  • 【已解决】用JAVA代码实现递归算法-从自然数中取3个数进行组合之递归算法-用递归算法找出 n(n>=3) 个自然数中取 3 个数的组合。
  • 在云渲染中3D工程文件安全性怎么样?
  • 【HarmonyOS】深入理解@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化
  • Unity-Screen屏幕相关
  • 【设计模式】万字详解:深入掌握五大基础行为模式
  • 鸿蒙 OS 开发零基础快速入门教程
  • ER论文阅读-Incomplete Multimodality-Diffused Emotion Recognition
  • 【LLM学习之路】9月22日 第九天 自然语言处理
  • 计算一个矩阵的逆矩阵的方法
  • 2024ICPC网络赛第一场C. Permutation Counting 4(线性代数)
  • nginx的反向代理和负载均衡
  • 16.3 k8s容器cpu内存告警指标与资源request和limit
  • 【数据结构-栈】力扣682. 棒球比赛
  • 0-1开发自己的obsidian plugin DAY 1
  • 鸿蒙操作系统(HarmonyOS)生态与机遇
  • YOLOv10改进,YOLOv10替换主干网络为PP-HGNetV1(百度飞桨视觉团队自研,全网首发,助力涨点)
  • watch和computed的使用及区别
  • Correcting Chinese Spelling Errors with Phonetic Pre-training(ACL2021)
  • Python Web 面试题
  • Spring Boot自定义配置项
  • [leetcode刷题]面试经典150题之6轮转数字(简单)
  • k8s上安装prometheus
  • 字母与符号检测系统源码分享
  • ubuntu、linux安装redis(使用tar包的方式)
  • 前端——实现时钟 附带小例子
  • 数据结构:线性表
  • 2024从传统到智能,AI做PPT软件的崛起之路
  • 【文心智能体】 旅游手绘手帐 开发分享 零代码 手绘风景 记录行程和心情 旅游攻略
  • 鹏哥C语言49---第5次作业:选择语句 if 和 switch