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

news2024/11/14 3:18:05

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.coloradmin.cn/o/2157397.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-17

计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-17 1. Large Language Models in Biomedical and Health Informatics: A Review with Bibliometric Analysis H Yu, L Fan, L Li, J Zhou, Z Ma, L Xian, W Hua, S He… - Journal of Healthcare …, 2024 生物…

HarmonyOS应用开发(组件库)--组件模块化开发、工具包、设计模式(持续更新)

致力于&#xff0c;UI开发拿来即用&#xff0c;提高开发效率 正则表达式...手机号校验...邮箱校验 文件判断文件是否存在 网络下载下载图片从沙箱中图片转为Base64格式从资源文件中读取图片转Base64 组件输入框...矩形输入框...输入框堆叠效果&#xff08;用于登录使用&#xf…

【自动驾驶】决策规划算法(二)参考线模块Ⅰ| 平滑算法与二次规划

写在前面&#xff1a; &#x1f31f; 欢迎光临 清流君 的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落。&#x1f4dd; 个人主页&#xff1a;清流君_CSDN博客&#xff0c;期待与您一同探索 移动机器人 领域的无限可能。 &#x1f50d; 本文系 清流君 原创之作&…

(学习记录)使用 STM32CubeMX——GPIO引脚输入配置

STM32F103C8T6的GPIO引脚输入配置 时钟配置 &#xff08;学习记录&#xff09;使用 STM32CubeMX——配置时钟&#xff08;入门&#xff09;https://blog.csdn.net/Wang2869902214/article/details/142423522 GPIO 引脚输出配置 &#xff08;学习记录&#xff09;使用 STM32…

Springcloud框架-能源管理系统-能源管理系统源码-能源在线监测平台-双碳平台

一、介绍 基于SpringCloud的能管管理系统-能源管理平台源码-能源在线监测平台-双碳平台源码-SpringCloud全家桶-能管管理系统源码 有需者咨询&#xff0c;非诚勿扰&#xff1b; 二、软件架构 二、功能介绍 三、数字大屏展示 四、数据采集原理 五、软件截图

macos pyenv 安装python tk 、tkinter图形库方法步骤和使用总结

在macos中&#xff0c; pyenv 是一款用来管理多版本python 的工具&#xff0c; 我们常用的tk图形库是一个独立的工具库&#xff0c;我们在python里面使用的tkinter模块仅是调用这个独立的tk图形库&#xff0c; 所以如果我们希望在python里面使用它&#xff0c; 就必须要先安装t…

委托的注册及注销+观察者模式

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

金融加密机的定义与功能

金融加密机是一种用于保护金融交易数据和信息安全的重要安全设备。它通过硬件和软件的多重保障&#xff0c;确保金融交易中的敏感数据不被泄露或篡改。以下是关于金融加密机的详细介绍&#xff1a; 一、定义与功能 金融加密机是一种硬件安全设备&#xff0c;通过实现各种密码算…

深度deepin初体验(一)系统详细安装过程 | 国产系统

这里写自定义目录标题 深度deepin初体验&#xff08;一&#xff09;系统详细安装过程1.介绍2.安装要求3.环境4.创建虚拟机/系统升级系统选择语言硬盘分区备份文件拷贝系统重启常规设置 深度deepin初体验&#xff08;一&#xff09;系统详细安装过程 1.介绍 深度deepin是在debi…

Python开发深度学习常见安装包 error 解决

Python Python 是一种广泛使用的高级编程语言&#xff0c;它以其清晰的语法和代码可读性而闻名。Python 支持多种编程范式&#xff0c;包括面向对象、命令式、函数式和过程式编程。由于其简洁性和强大的标准库&#xff0c;Python 成为了数据科学、机器学习、网络开发、自动化脚…

气膜馆:新型场馆的盈利之道—轻空间

气膜馆作为一种创新的场馆形式&#xff0c;凭借其先进的技术和灵活的应用&#xff0c;正在快速崛起&#xff0c;展现出广阔的市场前景与丰富的盈利潜力。通过多元化的经营模式&#xff0c;气膜馆为创业者提供了前所未有的商机。本文将深入分析气膜馆的盈利模式及其在市场中的竞…

气膜储煤棚:未来能源管理的新选择—轻空间

在全球对可持续发展与环保的日益重视下&#xff0c;传统的煤炭储存方式面临着诸多挑战。气膜储煤棚应运而生&#xff0c;成为现代煤炭储存的理想解决方案。本文将深入探讨气膜储煤棚的优势与应用&#xff0c;为企业提供新的思路。 先进的技术设计 气膜储煤棚采用创新的气膜技术…

AcWing算法基础课-790数的三次方根-Java题解

大家好&#xff0c;我是何未来&#xff0c;本篇文章给大家讲解《AcWing算法基础课》790 题——数的三次方根。本题考查算法为浮点数二分查找。本文详细介绍了一个使用二分法计算浮点数三次方根的算法。通过逐步逼近目标值&#xff0c;程序能够在给定的区间内精确计算出结果&…

关闭小广告【JavaScript】

在 JavaScript 中实现关闭小广告的功能&#xff0c;可以通过监听点击事件来隐藏广告元素。 实现效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport&q…

SpringBoot框架之KOB项目 - 配置Mysql与注册登录模块(中)

修改Spring Security 登录验证模式 传统的验证登录模式 公开页面&#xff1a;输入url就可以直接访问授权页面&#xff1a;登录之后才可以访问 Jwt验证模式 容易实现跨域不需要在服务器端存储 对比于传统模式将所有的sessionId换成jwt token access token refresh token 过…

如何在Chrome最新浏览器中调用ActiveX控件?

小编最近登陆工商银行网上银行&#xff0c;发现工商银行的个人网银网页&#xff0c;由于使用了ActiveX安全控件&#xff0c;导致不能用高版本Chrome浏览器打开&#xff0c;目前只有使用IE或基于IE内核的浏览器才能正常登录网上银行&#xff0c;而IE已经彻底停止更新了&#xff…

Tile View Kanban Board平铺视图和看板

Goto 数据网格和视图入门 平铺视图&#xff08;TileView 类&#xff09;将数据记录显示为平铺。此视图类型可以以任何自定义方式排列多个元素&#xff08;bound 和 unbound&#xff09;。用户可以按如下方式编辑瓦片&#xff1a; 使用模态 Edit Form。利用 HTML-CSS 平铺模板…

VScode配置连接远程服务器configure ssh Hosts

VScode配置连接远程服务器&#xff0c;具体步骤 一、点击VScode左下脚这两个∟的按钮 二、点击完上面的按钮后&#xff0c;出现如下的下拉选项&#xff0c;选择“Connect to Host” 三、选择“Connect to Host”后&#xff0c;下拉选项会更新&#xff0c;选择“Configure SSH …

openFrameworks_如何使用ofxXmlSettings和ofxGui来创建识别界面

效果图&#xff1a; 代码及详解 1.添加两个插件的头文件: #include "ofxGui.h" #include "ofxXmlSettings/src/ofxXmlSettings.h" 2.添加GUI部分&#xff0c;然后在.h声明右边的openframeworks的UI部分&#xff0c;包括面板ofxPanel&#xff0c;按钮ofx…

【JUC并发编程系列】深入理解Java并发机制:线程局部变量的奥秘与最佳实践(五、ThreadLocal原理、对象之间的引用)

文章目录 【JUC并发编程系列】深入理解Java并发机制&#xff1a;线程局部变量的奥秘与最佳实践(五、ThreadLocal原理、对象之间的引用)1. 基本 API 介绍2. 简单用法3. 应用场景4. Threadlocal与Synchronized区别5. 内存溢出和内存泄漏5.2 内存溢出 (Memory Overflow)5.2 内存泄…