javaEE学习笔记————maven基础总结!!

本文深入解析Maven项目管理工具,涵盖其定义、优势、依赖管理和一键构建特性。介绍了Maven的安装、配置及仓库管理,详细展示了Maven工程的目录结构、运行方式和ali镜像配置。并通过实践演示了Maven在IDEA中的应用,包括常用命令、生命周期、概念模型及具体操作步骤。
摘要由CSDN通过智能技术生成

1.maven介绍

1.1 什么是maven

1.1.1 定义
Maven 在美国是一个口语化的词语,代表专家、内行的意思
一个对 Maven 比较正式的定义是这么说的:Maven 是一个项目管理工具,它包含了一个项目对象模
型 (POM:Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管
理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)
1.1.2 maven可以解决的问题
我们来简单的举几个例子:
1 .平时不管写什么项目都免不了要导入各种的jar包,有了maven就可以帮你自动的导入
2 .平时检测某个功能都会用到单元测试,但是当有很多的功能的时候你还要一个个的去测试吗?显然浪费时间,maven就可以帮你集中的测试
3 .maven中有一个pom.xml的配置文件可以将所有的配置都写到这一个文件中,方便进行管理
4.如果一个项目很大的话,将会导致集中的依赖包也会很多,最终会导致整个项目过于庞大,而用了maven可以极大地缩小项目的体积
5.其他
1.1.3 Maven 的优势举例
在前面学习到的web项目开发的过程中,要能够将项目运行起来,就必须将该项目所依赖的一些 jar 包添加到
工程中,否则项目就不能运行。试想如果具有相同架构的项目有十个,那么我们就需要将这一份 jar
包复制到十个不同的工程中。我们一起来看一个 CRM项目的工程大小。
使用传统 Web 项目构建的 CRM 项目如下:

在这里插入图片描述

	原因主要是因为上面的 WEB 程序要运行,我们必须将项目运行所需的 Jar 包复制到工程目录中,从
	而导致了工程很大。
	同样的项目,如果我们使用 Maven 工程来构建,会发现总体上工程的大小会少很多。如下图:

在这里插入图片描述

1.2 Maven 的两个精典作用

1.2.1 依赖管理
Maven 的一个核心特性就是依赖管理。当我们涉及到多模块的项目(包含成百个模块或者子项目),管理依赖就变成
一项困难的任务。Maven 展示出了它对处理这种情形的高度控制。

在这里插入图片描述

	通过分析发现:maven 工程中不直接将 jar 包导入到工程中,而是通过在 pom.xml 文件中添加所需 jar
	包的坐标,这样就很好的避免了 jar 直接引入进来,在需要用到 jar 包的时候,只要查找 pom.xml 文
	件,再通过 pom.xml 文件中的坐标,到一个专门用于”存放 jar 包的仓库”(maven 仓库)中根据坐标从
	而找到这些 jar 包,再把这些 jar 包拿去运行。
	那么问题来了
	第一:”存放 jar 包的仓库”长什么样?
	第二:通过读取 pom.xml 文件中的坐标,再到仓库中找到 jar 包,会不会很慢?从而导致这种方式
	不可行!
	
	第一个问题:存放 jar 包的仓库长什么样,这一点我们后期会分析仓库的分类,也会带大家去看我们
	的本地的仓库长什么样。
	第二个问题:通过 pom.xml 文件配置要引入的 jar 包的坐标,再读取坐标并到仓库中加载 jar 包,这
	样我们就可以直接使用 jar 包了,为了解决这个过程中速度慢的问题,maven 中也有索引的概念,通
	过建立索引,可以大大提高加载 jar 包的速度,使得我们认为 jar 包基本跟放在本地的工程文件中再
	读取出来的速度是一样的。这个过程就好比我们查阅字典时,为了能够加快查找到内容,书前面的
	目录就好比是索引,有了这个目录我们就可以方便找到内容了,一样的在 maven 仓库中有了索引我
	们就可以认为可以快速找到 jar 包。
1.2.2 项目的一键构建
	我们的项目,往往都要经历编译、测试、运行、打包、安装 ,部署等一系列过程。
	什么是构建?
	指的是项目从编译、测试、运行、打包、安装 ,部署整个过程都交给 maven 进行管理,这个
	过程称为构建。
	一键构建
	指的是整个构建过程,使用 maven 一个命令可以轻松完成整个工作。

Maven 规范化构建流程如下:

在这里插入图片描述

2.maven的使用

2.1 maven的安装

2.1.1 Maven 软件的下载
大家可以直接去官网下载:

maven官网
在这里插入图片描述

2.1.2 Maven 软件的安装
将下载好的压缩包解压到没有中文和空格的路径下:(我直接解压到了G盘的根目录)

在这里插入图片描述

解压好的文件目录如下:

在这里插入图片描述

bin:存放了 maven 的命令,比如我们前面用到的 mvn tomcat:run
boot:存放了一些 maven 本身的引导程序,如类加载器等
conf:存放了 maven 的一些配置文件,如 setting.xml 文件
lib:存放了 maven 本身运行所需的一些 jar 包
至此我们的 maven 软件就可以使用了,前提是你的电脑上之前已经安装并配置好了 JDK。
2.1.3 jdk的准备
我使用的jdk8,一般学习java的都有的我就不多说了.有问题私聊
2.1.4 Maven 及 JDK 配置
配置 MAVEN_HOME ,变量值就是你的 maven 安装 的路径(bin 目录之前一级目录)

在这里插入图片描述

	配置path:%MAVEN_HOME%\bin

在这里插入图片描述

2.1.5 Maven 软件版本测试
打开cmd运行mvn -v

在这里插入图片描述

2.2 maven仓库

2.2.1 Maven 仓库的分类
maven 中仓库的类型:

在这里插入图片描述

本地仓库 :用来存储从远程仓库或中央仓库下载的插件和 jar 包,项目使用一些插件或 jar 包,
优先从本地仓库查找
默认本地仓库位置在 ${user.dir}/.m2/repository,${user.dir}表示 windows 用户目录。	

我的maven仓库:(我放到了maven里面,方面以后拿走用)

下面的那个del_lsatupdate.bat是用来删除后缀为lastupdate 的文件的,一般遇到这种情况都是下载依赖失败的

在这里插入图片描述

远程仓库:如果本地需要插件或者 jar 包,本地仓库没有,默认去远程仓库下载。
远程仓库可以在互联网内也可以在局域网内。

中央仓库 :在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2 ,它是中
央仓库,服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包
含了世界上大部分流行的开源项目构件。
2.2.2 Maven 本地仓库的配置
找到maven目录下的conf目录下的setting.xml

在这里插入图片描述
在红色方框的位置写上你自己的仓库目录
在这里插入图片描述

2.3 maven工程的认识

2.3.1 Maven 工程的目录结构

在这里插入图片描述

作为一个 maven 工程,它的 src 目录和 pom.xml 是必备的。
进入 src 目录后,我们发现它里面的目录结构如下:

在这里插入图片描述

src/main/java —— 存放项目的.java 文件
src/main/resources —— 存放项目资源文件,如 spring, hibernate 配置文件
src/test/java —— 存放所有单元测试.java 文件,如 JUnit 测试类
src/test/resources —— 测试资源文件
target —— 项目输出位置,编译后的 class 文件会输出到此目录
pom.xml——maven 项目核心配置文件
注意:如果是普通的 java 项目,那么就没有 webapp 目录。
2.3.2 Maven 工程的运行
进入 maven 工程目录(当前目录有 pom.xml 文件),运行 tomcat:run 命令。

在这里插入图片描述
根据上边的提示信息,通过浏览器访问:http://localhost:8080/maven-web003/
在这里插入图片描述

2.3.3 maven下的ali镜像配置
网上有各种各样样的版本,我也试了很多个,我现在用的这个:
找到setting.xml:在mirros下输入以下的内容
	<mirror>
		<id>nexus-aliyun</id>
		<mirrorOf>central</mirrorOf>
		<name>Nexus aliyun</name>
		<url>http://maven.aliyun.com/nexus/content/repositories/central</url>
	</mirror>

在这里插入图片描述

3. maven 的项目实践

3.1 maven常用命令

 compile:查看 target 目录,生成class 文件,编译。
 test :maven 工程的测试命令 mvn test,会执行 src/test/java 下的单元测试类
 clean :maven 工程的清理命令,执行 clean 会删除 target 目录及内容。
 package :maven 工程的打包命令,对于 java 工程执行 package 打成 jar 包,对于 web 工程打成 war包。
 install : maven 工程的安装命令,执行 install 将 maven 打成 jar 包或 war 包发布到本地仓库。

3.2 maven 指令的生命周期

maven 对项目构建过程分为三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,
这三套生命周期分别是:

在这里插入图片描述

Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
Site Lifecycle 生成项目报告,站点,发布站点。	

3.3 maven 的概念模型

Maven 包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project 
Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段
(phase)中插件(plugin)目标(goal)的逻辑。

在这里插入图片描述

3.4 idea开发的maven项目

3.4.1 idea的maven配置

在这里插入图片描述

3.4.2 idea 中创建一个 maven 的 web 工程

点击create new project
在这里插入图片描述
选择 idea 提供好的 maven 的web 工程模板
在这里插入图片描述
点击next
在这里插入图片描述
点击next
在这里插入图片描述
直接next

在这里插入图片描述

点击finsh

3.4.3 idea中具体的操作
首先大家新建如下的文件夹,具体的包的名称,大家按照自己的来

在这里插入图片描述
在新建一个servlert 的过程中大家没有办法通过单击右键找到servlet,我们需要导入依赖

	<dependency>
	      <groupId>javax.servlet</groupId>
	      <artifactId>servlet-api</artifactId>
	      <version>2.5</version>
	      <scope>provided</scope>
	    </dependency>
	    <dependency>
	      <groupId>javax.servlet.jsp</groupId>
	      <artifactId>jsp-api</artifactId>
	      <version>2.0</version>
	      <scope>provided</scope>
		</dependency>
		<dependency>
		      <groupId>junit</groupId>
		      <artifactId>junit</artifactId>
		      <version>4.12</version>
		      <scope>test</scope>
    	</dependency>

然后就可以创建一个servlet 文件,至于servlet 的配置大家自己配置好

3.4.4 设置jdk 的版本
 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
      <target>1.8</target>
      <source>1.8</source>
      <encoding>UTF-8</encoding>
    </configuration>
  </plugin>
3.4.5 添加servlet7插件
  <plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
      <port>8080</port>
    </configuration>
  </plugin>
3.4.6 编写servlet
public class MyServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getRequestDispatcher("hello.jsp").forward(request,response);
    }
}

3.4.7 编写servlet
<%--
  Created by IntelliJ IDEA.
  User: Belief
  Date: 2020/6/11
  Time: 11:19
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
hello maven
</body>
</html>

3.4.8 运行

在这里插入图片描述
运行tomcat7:run
在这里插入图片描述

在这里插入图片描述

abstract (关键字) 抽象 ['æbstrækt] access vt.访问,存取 ['ækses]'(n.入口,使用权) algorithm n.算法 ['ælgәriðm] Annotation [java] 代码注释 [ænәu'teiʃәn] anonymous adj.匿名的[ә'nɒnimәs]'(反义:directly adv.直接地,立即[di'rektli, dai'rektli]) apply v.应用,适用 [ә'plai] application n.应用,应用程序 [,æpli'keiʃәn]' (application crash 程序崩溃) arbitrary a.任意的 ['ɑ:bitrәri] argument n.参数;争论,论据 ['ɑ:gjumәnt]'(缩写 args) assert (关键字) 断言 [ә'sә:t] ' (java 1.4 之后成为关键字) associate n.关联(同伴,伙伴) [ә'sәuʃieit] attribute n.属性(品质,特征) [ә'tribju:t] boolean (关键字) 逻辑的, 布尔型 call n.v.调用; 呼叫; [kɒ:l] circumstance n.事件(环境,状况) ['sә:kәmstәns] crash n.崩溃,破碎 [kræʃ] cohesion 内聚,黏聚,结合 [kәu'hi:ʒәn] (a class is designed with a single, well-focoused purpose. 应该不止这点) command n. 命令,指令 [kә'mɑ:nd](指挥, 控制) (command-line 命令行) Comments [java] 文本注释 ['kɒments] compile [java] v.编译 [kәm'pail]' Compilation n.编辑[,kɒmpi'leiʃәn] const (保留字) constant n. 常量, 常数, 恒量 ['kɒnstәnt] continue (关键字) coupling 耦合,联结 ['kʌpliŋ] making sure that classes know about other classes only through their APIs. declare [java] 声明 [di'klєә] default (关键字) 默认值; 缺省值 [di'fɒ:lt] delimiter 定义符; 定界符 Encapsulation[java] 封装 (hiding implementation details) Exception [java] 例外; 异常 [ik'sepʃәn] entry n.登录项, 输入项, 条目['entri] enum (关键字) execute vt.执行 ['eksikju:t] exhibit v.显示, 陈列 [ig'zibit] exist 存在, 发生 [ig'zist] '(SQL关键字 exists) extends (关键字) 继承、扩展 [ik'stend] false (关键字) final (关键字) finally (关键字) fragments 段落; 代码块 ['frægmәnt] FrameWork [java] 结构,框架 ['freimwә:k] Generic [java] 泛型 [dʒi'nerik] goto (保留字) 跳转 heap n.堆 [hi:p] implements (关键字) 实现 ['implim
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值