Maven翻译为“专家”,“内行”。Maven是Apache下的一个纯java开发的 开源 项目。
Maven 是一个 项目管理工具 ,可以对 Java 项目进行构建、依赖管理。
Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的项目。
Maven创始者希望能够更多的让Java开发人员的日常工作更加容易,帮助理解任何基于Java项目
项目构建 和 依赖管理 。
1.2.1 项目构建
项目构建是一个项目从:源代码、编译、测试、打包、部署、运行的过程。
1.2.1.1 传统项目构建过程
原来构建项目的过程如下:以web项目为例
1 )在idea中创建一个java web工程
2 )在工程中编写源代码及配置文件等
3 )对源代码进行编译,java源文件编译成.class文件
4 )执行Junit单元测试
5 )将工程打成war包部署至tomcat运行
1.2.1.2 Maven项目构建过程
Maven将项目构建的过程进行 标准化 ,每个阶段使用一个命令完成,下图展示了构建过程的一些阶段:
清理:删除以前的编译结果,为重新编译做好准备。
编译:将Java源程序编译为字节码文件。
测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
报告:在每一次测试后以标准的格式记录和展示测试结果。
打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java 工程对应 jar 包,Web工程对应war包。
安装:在Maven环境下特指将打包的结果——jar包或war包安装到本地仓库中。
部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行
1.2.1.3 项目的构建方式
1 )Ant
Ant只是一个项目构建工具,它没有集成依赖管理。
Ant在进行项目构建时,它没有对项目目录结构进行约定,需要手动指定源文件、类文件等目录地址。同时它执行task时,需要显示指定依赖的task,这样会造成大量的代码重复。
2 )Maven
Maven不仅是一个项目构建工具,更是一个项目管理工具。它在项目构建工程中,比ant更全面,更灵活。 Maven在进行项目构建时,它对项目目录结构拥有约定,知道你的源代码在哪里,类文件应该放到哪里去。它拥有生命周期的概念,Maven的生命周期是有顺序的,在执行后面的生命周期的任务时,不需要显示的配置前面任务的生命周期。例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程。
3 )Gradle
一个开源的自动化构建系统,建立在Apache Ant和Maven Apache概念的基础上,并引入了基于Groovy的特定领域语言(DSL),而不是使用Apache Maven宣布的项目配置XML形式。
1.2.2 什么是依赖管理
什么是依赖?一个java项目可能要使用一些第三方的jar包才可以运行,那么我们说这个java项目依赖了这些第三方的jar包。例如大家前面学过的javaWeb中需要的连接数据库的jar包、数据源的jar包等等。什么是依赖管理?就是对项目所有依赖的jar包进行规范化管理。
1.2.2.1 传统项目的依赖管理
传统的项目工程要管理所依赖的jar包完全靠人工进行,程序员从网上下载jar包添加到项目工程中。
手动拷贝jar包添加到工程中的问题是:
1 )没有对jar包的版本统一管理,容易导致版本冲突。
2 )从网上找jar包非常不方便,有些jar找不到。
3 )jar包添加到工程中导致工程过大。
1.2.2.2 Maven项目的依赖管理
Maven项目管理所依赖的jar包不需要手动向工程添加jar包,只需要在pom.xml(Maven工程的配置文件)添加jar包的坐标,自动从Maven仓库中下载jar包运行。
使用Maven依赖管理添加jar的好处:
1 )通过pom.xml文件对jar包的版本进行统一管理,可避免版本冲突。
2 )Maven团队维护了一个非常全的Maven仓库,里边包括了当前使用的jar包,Maven工程可以自动从Maven仓库下载jar包,非常方便。
通过上边介绍传统项目和Maven项目在项目构建及依赖管理方面的区别,Maven有如下的好处:
1 . 一步构建
Maven对项目构建的过程进行标准化,通过一个命令即可完成构建过程。
2 . 依赖管理
Maven工程不用手动导jar包,通过在pom.xml中定义坐标从Maven仓库自动下载,方便且不易出错。
3 . Maven的跨平台,可在window、linux上使用。
4 . Maven遵循规范开发,有利于提高大型团队的开发效率,降低项目的维护成本,公司都会考虑使用Maven来构建项目。
==================================================================================
网址: http://Maven.apache.org/download.cgi 选择所需要的版本。
推荐安装3.5及以上的版本,本文博主安装的是3.3.9版本,但后续也更换成了3.6.1的版本。
更换Maven版本只需要把环境变量的路径改成新下载的Maven路径就可以了,很简单(博主亲测)。
将下载好的Maven安装包解压到一个不含有中文和空格的目录中。
安装包解压即可使用。
目录说明:
bin目录: 该目录包含了 mvn 运行的脚本
boot目录:Maven运行需要类加载器
conf目录:该目录包含了一个非常重要的文件 settings.xml。直接修改该文件,就能在机器上全局地定制 Maven 的行为
lib目录: Maven运行依赖jar包
前提必须有java的环境变量(推荐使用JDK8):
java -version
配置Maven环境变量
通过mvn -v命令检查 Maven是否安装成功
mvn -v
找到Maven安装路径下的settings.xml配置文件
Maven默认使用jdk1.7,我们常用的是jdk1.8,所以直接在配置文件中修改。
jdk-1.8
true
1.8
<Maven.compiler.source>1.8</Maven.compiler.source>
<Maven.compiler.target>1.8</Maven.compiler.target>
<Maven.compiler.compilerVersion>1.8</Maven.compiler.compilerVersion>
=================================================================================
Maven默认约定了一套目录结构 ,在通过Maven创建了项目以后,项目的目录结构就是以这套目录结构作为模板创建的。虽然Maven提供了很多的模板,但是基本的目录结构都是固定的。
Maven约定的目录结构:
myFirstMavenProject
|-- src |–
|-- main |–
|-- |-- java —— 项目的源代码所在的目录 com.lyc.entity
|-- |-- |-- resources —— 项目的资源文件所在的目录
|-- |-- |-- webapp —— 如果是web项目,则该目录是web应用源代码所在的目录
|-- |-- |-- |–WEB-INF
|-- |-- |-- |-- |-- web.xml
|-- |-- test
|-- |-- |-- java ——测试代码所在的目录,如JUnit测试类 com.lyc.dao.test
|-- |-- |-- resources ——测试相关的资源文件所在的目录
|-- target —— 项目构建的输出文件,如.class、.jar、.war文件(不需要创建,会自动 生成)
|-- pom.xml ——Maven项目核心配置文件,项目的描述文件
在 Maven中可以将仓库理解位一个位置,一个专门存放项目中依赖的第三方库的位置。
3.2.1 maven仓库的分类
maven的仓库可以分为 本地仓库和远程仓库 。
3.2.1.1 本地仓库
本地仓库相当于一个缓存,在电脑上是一个文件夹,我们可以设置这个文件夹的路径(具体怎么设置会在下面的配置体现),工程第一次需要某种jar包时,会从远程仓库(互联网)下载并保存到本地仓库中(在程序员的电脑上),当第二次使用时,不需要去远程仓库下载,先去本地仓库中找,如果找不到才会去远程仓库上下载。
默认情况下,每个用户在自己的用户目录下都有一个路径名为 .m2/respository/ 的仓库目录。
3.2.1.2 远程仓库
远程仓库中分为 中央仓库 和 私服 两类。
3.2.1.2.1 中央仓库
中央仓库中的jar包由专业团队(Maven团队)维护,中央仓库中存放了全世界大多数流行的开源软件的jar包, 是Maven默认的远程仓库。
要浏览中央仓库的内容,Maven 社区提供了一个 URL:http://search.Maven.org/#browse。使用这个仓库,开发人员可以搜索所有可以获取的代码库。
3.2.1.2.2 私服
私服是另一种特殊的远程仓库,为了节省带宽和时间,应该在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库。内部的项目还能部署到私服上供其他项目使用。除了中央仓库和私服,还有很多其他公开的远程仓库,常见的有java.net Maven库(http://download.java.net/maven/2/)和jbossMaven库(http://repository.jboss.com/maven2/)等
3.2.2 配置本地仓库
当你运行 Maven 命令,Maven 将下载依赖的文件到你指定的路径中。
在Maven的安装路径下的conf文件中的setting.xml文件下添加如下内容:
PS:自己先新建一个文件夹作为本地仓库,路径不要有中文和非法字符。
D:\repository
3.2.3 配置远程仓库镜像(阿里云)
Maven默认的远程仓库是Maven团队维护的中央仓库,由于网络原因,去中央仓库下载jar包需要到国外的网站,不太便捷,速度慢,于是我们可以选择把国内的阿里云的Maven仓库作为中央仓库镜像。修改 Maven 根目录下的 conf 文件夹中的 settings.xml 文件,在 mirrors 节点上,添加内容如下:
nexus-aliyun
Nexus aliyun
http://Maven.aliyun.com/nexus/content/groups/public/
*
POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。
<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.
http://Maven.apache.org/xsd/Maven-4.0.0.xsd">
4.0.0
com.kkb.Maven
HelloWorld
0.0.1-snapshot
jar
Hello
junit
junit
4.12
test
…
3.4.1 什么是坐标
在平面几何中坐标(x,y)可以标识平面中唯一的一点。在Maven中坐标就是为了定位一个唯一确定的jar包。
Maven世界拥有大量构件,我们需要找一个用来唯一标识一个构建的统一规范。拥有了统一规范,就可以把查找工作交给机器.
3.4.2 Maven坐标主要组成
groupId:定义当前Maven项目组织名称
artifactId:定义实际项目名称
version:定义当前项目的当前版本或者是所依赖的jar包的版本
3.5.1 什么是生命周期
Maven生命周期就是为了对所有的构建过程进行抽象和统一。包括项目清理、初始化、编译、打包、测试、部署等几乎所有构建步骤。生命周期可以理解为构建工程的步骤。
3.5.2 Maven三大生命周期
Maven拥有三套 相互独立 的生命周期,分别是clean、default 和 site.
clean Lifecycle: 在进行真正的构建之前进行一些清理工作。 mvn clean
default Lifecycle: 构建的核心部分,编译,测试,打包,部署等等。
site Lifecycle: 生成项目报告,站点,发布站点。
3.5.2.1 clean生命周期
clean的目的是 清理项目 。
每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比如,运行mvn clean ,这个的clean是Clean生命周期的一个阶段。有Clean生命周期,也有clean阶段。
包含3个阶段:
1.pre-clean 执行一些清理前需要完成的工作
2.clean 清理上一次构建过程中生成的文件,比如编译后的class文件等
3.post-clean 执行一些清理后需要完成的工作
3.5.2.2 default生命周期- 构建项目
所有生命周期中 最核心的部分 ,绝大部分工作都发生在这个生命周期中。
咱们只介绍一些比较重要和常用的阶段:
generate-resources: 产生主代码中的资源在classpath中的包
process-resource: 复制并处理资源文件,至目标目录,准备打包。
compile: 编译项目的主源码.一般来说:编译src/main/java目录下的java文件至项目输出的主
classpath目录中
test-compile:编译项目的测试代码,是编译src/test/java目录下的java文件至项目输出的测试
classpath目录中
test:使用单元测试框架运行测试,测试代码不会被打包或部署.
package:打包成可发布的格式
install: 将包安装到Maven本地仓库,供本地其他Maven项目使用
deploy:将最终的包复制到远程仓库,供其他开发人员和Maven项目使用
PS:运行任何一个阶段的时候,它前面的所有阶段都会被运行,这也就是为什么我们运行mvn install 的时候,代码会被编译,测试,打包。此外,Maven的插件机制是完全依赖Maven的生命周期的,因此理解生命周期至关重要。
参考资料地址:点击跳转
3.5.2.3 site生命周期-生成项目站点
目的:建立和发布项目站点
pre-site 执行一些在生成项目站点之前需要完成的工作.
site 生成项目站点文档
post-site 执行一些在生成项目站点之后需要完成的工作.
site-deploy 将生成的项目站点发布到服务器上
====================================================================================
通过入门程序中命令行的方式使用Maven工作效率不高,可以在开发工具中集成Maven软件,idea是一个开发工具,Maven是一个项目管理工具,Maven有一套项目构建的规范,在idea集成Maven软件,最终通过idea创建Maven工程。
- 打开IDEA,进入主界面后点击 configure,然后点击 settings
- 在上面的快捷查找框中输入Maven,查找与Maven相关的设置,然后点击Maven,按如图配置。
-DarchetypeCatalog=internal
这个是取消一些不重要的提示,对强迫症很友好
每个Maven工程都需要定义本工程的坐标,坐标是Maven对jar包的身份定义。
例如:定义一个入门程序的坐标
com.kkb
my-first-Maven
0.0.1-SNAPSHOT
jar
4.3.1 使用骨架创建Maven的java工程
- 选择Create New Project按钮
- 选中左侧的Maven,并将Create from archetype选中,在下方选择骨架quickstart,点击Next。
- 填写项目的名称以及存储的位置。点击下方的Artifact Coordinates,填写项目坐标的基本信息。
- 确认信是否正确
- 生成的目录结构
- 手动将Maven文件夹补齐。
- 同样在test文件夹下创建resources文件夹,最后的目录结构:
4.3.2 不使用骨架创建Maven的java工程
- 新建一个工程,不使用骨架时直接在Maven下点击Next按钮
- 填写项目的名称以及存储的位置。点击下方的Artifact Coordinates,填写项目坐标的基本信息。
- 新建的项目test文件夹下没有resources文件夹,我们需要手动将Maven文件夹补齐。最后的目录结构:
4.4.1 使用骨架创建Maven的java web工程
- 选中左侧的Maven,并将Create from archetype选中,在下方选择骨架webapp,点击Next
- 填写项目的名称以及存储的位置。点击下方的Artifact Coordinates,填写项目坐标的基本信息
- 创建的目录结构如下
- 补齐其他文件夹后的目录
4.4.2 不使用骨架创建Maven的java web工程
- 新建项目,选择Maven。因为不使用骨架创建Web项目,所以不勾选Create from archetype,直接点击Next
- 编辑项目名,编辑好后点击Finish
- 不使用骨架的Web项目已经创建完成了,下面是基本的结构,没有web目录
- 我们需要手动添加Web目录,按照以下顺序添加web目录。
- 点击Artifacts,加入刚才创建的内容
- 现在项目基本创建完成,点击OK ,就完成了,下面就有Maven的web项目基本目录
首先咱们将刚刚创建的web项目中编写一个jsp页面和servlet,然后可以通过配置的tomcat插件方式运行项目
如果是tomcat较高版本 例如tomcat9.0 可参考文章:maven配置tomcat9.0
pom.xml文件中添加如下内容
war
javax.servlet
javax.servlet-api
4.0.1
provided
javax.servlet.jsp
jsp-api
2.0
provided
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
编写servlet
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(“/hello”)
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println(“hello-----------”);
resp.getWriter().write(“hello maven”);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doPost(req, resp);
}
}
webapp文件夹下面添加index.jsp页面
<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>
hello index------------
- 配置tomcat插件运行的方式
- 点击运行按钮:
- 运行结果:
================================================================================
PS:Maven的命令需要在pom.xml所在目录中执行以下命令。
mvn compile
执行 mvn compile 命令,完成编译操作。
执行完毕后,会生成target目录,该目录中存放了编译后的字节码文件。
mvn clean
执行 mvn clean 命令,执行完毕后,会将target目录删除。
mvn test
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://i-blog.csdnimg.cn/blog_migrate/fe83f8d2e1d5a24fbe909e2b58afc1aa.jpeg)
技术学习总结
学习技术一定要制定一个明确的学习路线,这样才能高效的学习,不必要做无效功,既浪费时间又得不到什么效率,大家不妨按照我这份路线来学习。
最后面试分享
大家不妨直接在牛客和力扣上多刷题,同时,我也拿了一些面试题跟大家分享,也是从一些大佬那里获得的,大家不妨多刷刷题,为金九银十冲一波!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
执行 mvn clean 命令,执行完毕后,会将target目录删除。
mvn test
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-xYevjY0a-1713415308955)]
[外链图片转存中…(img-BbXjLjXn-1713415308955)]
[外链图片转存中…(img-yz8TRn4t-1713415308955)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://i-blog.csdnimg.cn/blog_migrate/fe83f8d2e1d5a24fbe909e2b58afc1aa.jpeg)
技术学习总结
学习技术一定要制定一个明确的学习路线,这样才能高效的学习,不必要做无效功,既浪费时间又得不到什么效率,大家不妨按照我这份路线来学习。
[外链图片转存中…(img-UNHYJBB1-1713415308956)]
[外链图片转存中…(img-Ln24OLI5-1713415308956)]
[外链图片转存中…(img-9v7IUzUS-1713415308956)]
最后面试分享
大家不妨直接在牛客和力扣上多刷题,同时,我也拿了一些面试题跟大家分享,也是从一些大佬那里获得的,大家不妨多刷刷题,为金九银十冲一波!
[外链图片转存中…(img-POYvHHeH-1713415308957)]
[外链图片转存中…(img-Jv0qPuQf-1713415308957)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!