目录
[1. Maven的概念](#1. Maven的概念)
[1.1 什么是Maven](#1.1 什么是Maven)
[1.2 什么是依赖管理](#1.2 什么是依赖管理)
[1.3 什么是项目构建](#1.3 什么是项目构建)
[1.4 Maven的应用场景](#1.4 Maven的应用场景)
[1.5 为什么使用Maven](#1.5 为什么使用Maven)
[1.6 Maven模型](#1.6 Maven模型)
[2.1 Maven安装](#2.1 Maven安装)
[2.1.1 安装准备](#2.1.1 安装准备)
[2.1.2 Maven安装目录分析](#2.1.2 Maven安装目录分析)
[2.1.3 Maven的环境变量](#2.1.3 Maven的环境变量)
[2.2 Maven的第一个项目](#2.2 Maven的第一个项目)
[2.2.1 按照约定创建Maven项目目录](#2.2.1 按照约定创建Maven项目目录)
[2.2.2 在项目Hello根目录建立pom.xml](#2.2.2 在项目Hello根目录建立pom.xml)
[2.2.3 创建Hello.java文件](#2.2.3 创建Hello.java文件)
[2.2.4 创建HelloTest.java文件](#2.2.4 创建HelloTest.java文件)
[2.2.5 进行maven的项目操作](#2.2.5 进行maven的项目操作)
[2.3 Maven的第二个项目](#2.3 Maven的第二个项目)
[2.3.1 按照约定创建Maven项目目录](#2.3.1 按照约定创建Maven项目目录)
[2.3.2 在项目HelloFriend根目录建立pom.xml](#2.3.2 在项目HelloFriend根目录建立pom.xml)
[2.3.3 创建HelloFriend.java文件](#2.3.3 创建HelloFriend.java文件)
[2.3.4 创建HelloFriendTest.java文件](#2.3.4 创建HelloFriendTest.java文件)
[2.3.5 测试打包HelloFriend项目](#2.3.5 测试打包HelloFriend项目)
[2.4 Maven仓库配置](#2.4 Maven仓库配置)
[2.4.1 Maven仓库概念](#2.4.1 Maven仓库概念)
[2.4.2 Maven本地仓库配置](#2.4.2 Maven本地仓库配置)
[2.5 IDEA整合Maven项目](#2.5 IDEA整合Maven项目)
[2.5.1 IDEA的Maven全局配置](#2.5.1 IDEA的Maven全局配置)
[2.5.2 IDEA创建Maven的Java项目](#2.5.2 IDEA创建Maven的Java项目)
[2.5.3 IDEA创建Maven的Java web项目](#2.5.3 IDEA创建Maven的Java web项目)
[2.6 Maven项目视图](#2.6 Maven项目视图)
1. Maven的概念
1.1 什么是Maven
Maven是跨平台的项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。
- 什么是理想的项目构建?
高度自动化,跨平台,可重用的组件,标准化的流程
- 什么是依赖?为什么要进行依赖管理?
自动下载,统一依赖管理
A1.0 依托于 B2.0 依托于 C3.0
- 有哪些项目信息?
项目名称描述等,开发人员信息,开发者信息等
1.2 什么是依赖管理
对第三方依赖包的管理,可以连接互联网下载项目所需第三方jar包。
对自己开发的模块的管理,可以像引用第三方依赖包一样引用自己项目的依赖包。
1.3 什么是项目构建
项目构建:是一个从编写源代码到编译、测试、运行、打包、部署的过程。
传统项目和maven项目构建的两种方式:
- 传统项目:打开Idea编写源代码和配置文件,对源代码进行编译,可以使用Junit进行单元测试,把项目打成war包,部署到Tomcat服务器中运行。
- maven项目:maven将项目构建过程进行标准化,每个阶段都可以使用一个命令来完成。
清理 --> 编译 --> 测试 --> 报告 --> 打包 --> 部署
好处:可以通过命令完成项目构建。(测试:使用mvn tomcat:run的命令来发布运行项目)
maven对每个构建阶段进行规范,有利于大型团队协作开发。
1.4 Maven的应用场景
maven的应用场景,开发人员只要按着maven标准的目录结构进行开发即可,然后提交代码。在测试服务器上拉取Java源码,然后可以使用maven的自动化项目构建完成项目的清理、编译、测试、打包和安装部署等。
1.5 为什么使用Maven
- IDE?Eclipse?IDEA?
手工操作较多,编译、测试、部署等工作都是独立的,很难一步完成
每个人的IDE配置都不同,很容易就出错出现本地代码换个地方编译
- Ant?
没有一个约定的目录结构
必须明确让ant做什么,什么时候做,然后编译,打包
没有生命周期,必须定义目标及其实现的任务序列
没有集成依赖管理
- Maven?
拥有约定,知道你的代码在哪里,放到哪里去
拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程
只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮你处理其他事情
拥有依赖管理,仓库管理
1.6 Maven模型
Maven模型主要由三部分组成:构建生命周期、POM、dependence。
构建生命周期:就是用来完成标准化构建流程 。当我们需要编译,Maven提供了一个编译插件供我们使用;当我们需要打包,Maven就提供了一个打包插件供我们使用等。
在执行这些构建操作的时候,不同的阶段又会有不同的文件产生,比如编译之后就会有编译之后的字节码文件产生,打包之后,就会有打包之后的jar文件产生。
POM:将我们自己的项目抽象成一个对象模型,有自己专属的坐标,如下图所示是一个Maven项目:
dependence:使用坐标来描述当前项目依赖哪些第三方jar包
2.初识Maven
2.1 Maven安装
2.1.1 安装准备
① 安装jdk1.8或以上版本
② 下载Maven
下载地址:https://archive.apache.org/dist/maven/maven-3/3.6.0/binaries/
版本:Maven3.6
③ 安装Maven
解压到相应目录即可(无中文路径)
2.1.2 Maven安装目录分析
bin:含有mvn运行的脚本
boot:含有plexus-classworlds类加载器框架
conf:含有settings.xml配置文件
lib:含有Maven运行时所需要的java类库
LICENSE.txt, NOTICE.txt, README.txt针对Maven版本,第三方软件等简要介绍
2.1.3 Maven的环境变量
① 设置MAVEN_HOME环境变量
升级时只需要下载最新版本,解压缩重新设置MAVEN_HOME环境变量即可
② 配置用户范围的settings.xml
%MAVEN_HOME%/conf/settings.xml 全局的
~/.m2/settings.xml 单个用户的
设置MAVEN_HOME环境变量,把maven的解压后的路径添加为变量值
设置Path环境变量,把 %MAVEN_HOME%\bin 添加到Path的变量值末尾。
验证配置是否完成
2.2 Maven的第一个项目
2.2.1 按照约定创建Maven项目目录
src/main/java ------ 存放项目的.java文件
src/main/resources ------ 存放项目资源文件,如spring, mybatis配置文件
src/test/java ------ 存放所有测试.java文件,如JUnit测试类
src/test/resources ------ 测试资源文件
target ------ 项目输出位置 (自动生成)
pom.xml
以上文件夹都是我们手动创建的,目的是为了更好地了解java Maven项目的目录结构。但是为了更加直观的看到其目录,我们使用idea打开该项目。
2.2.2 在项目Hello根目录建立pom.xml
XML
<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"> xml约束
<modelVersion>4.0.0</modelVersion>
<groupId>cn.tx.maven</groupId>
<artifactId>Hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Hello</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
2.2.3 创建Hello.java文件
在src/main/java/cn/tx/maven目录下新建文件Hello.java
java
package cn.tx.maven;
public class Hello {
public String sayHello(String name){
return "Hello "+name+"!";
}
}
2.2.4 创建HelloTest.java文件
在/src/test/java/cn/tx/maven目录下新建测试文件HelloTest.java
java
package cn.tx.maven;
import org.junit.Test;
import static junit.framework.Assert.*;
public class HelloTest {
@Test
public void testHello(){
Hello hello = new Hello();
String results = hello.sayHello("maven");
assertEquals("Hello maven!",results);
}
}
2.2.5 进行maven的项目操作
- 打开cmd命令行,进入Hello项目根目录执行 mvn compile命令,查看根目录变化
mvn compile命令用于将项目的源代码编译成字节码(.class 文件),并将其放置到 target/classes 目录中。
- cmd 中继续录入mvn clean命令,然后再次查看根目录变化。
mvn clean命令用于清理项目的 target 目录,即删除之前构建时生成的所有文件。
-
cmd 中录入 mvn clean compile命令, 查看根目录变化
-
cmd 中录入 mvn clean test命令,查看根目录变化
此命令首先清理项目(删除 target 目录),然后运行项目中的单元测试。
- cmd 中录入 mvn clean package命令,查看根目录变化
该命令在执行时会先清空 target 目录,然后编译项目,并将编译好的代码打包成可发布的格式(通常是 .jar 或 .war 文件),放在 target 目录下。
- cmd 中录入 mvn clean install 查看仓库会把项目安装到仓库里
此命令首先执行 clean,然后执行 package,最后将生成的包安装到本地 Maven 仓库,以供其他项目使用。
2.3 Maven的第二个项目
2.3.1 按照约定创建Maven项目目录
HelloFriend
--src
-----main
----------java
----------resources
-----test
---------java
---------resources
--pom.xml
2.3.2 在项目HelloFriend根目录建立pom.xml
在项目HelloFriend根目录建立pom.xml
XML
<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>cn.tx.maven</groupId>
<artifactId>HelloFriend</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>HelloFriend</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>cn.tx.maven</groupId> //第一个项目的包名
<artifactId>Hello</artifactId> //第一个项目的文件名
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
2.3.3 创建HelloFriend.java文件
在src/main/java/cn/tx/maven目录下新建文件HelloFriend.java
javapackage cn.tx.maven; import cn.tx.maven.Hello; public class HelloFriend { public String sayHelloToFriend(String name){ Hello hello = new Hello(); String str = hello.sayHello(name)+" I am "+this.getMyName(); System.out.println(str); return str; } public String getMyName(){ return "John"; } }
2.3.4 创建HelloFriendTest.java文件
在/src/test/java/cn/tx/maven目录下新建测试文件HelloFriendTest.java
java
package cn.tx.maven;
import static junit.framework.Assert.assertEquals;
import org.junit.Test;
import cn.tx.maven.Hello;
public class HelloFriendTest {
@Test
public void tesHelloFriend(){
HelloFriend helloFriend = new HelloFriend();
String results = helloFriend.sayHelloToFriend("zhangsan");
assertEquals("Hello zhangsan! I am John",results);
}
}
2.3.5 测试打包HelloFriend项目
在HelloFriend目录下执行命令mvn package
系统报错提示:Could not find artifact cn.tx.maven:Hello:jar:0.0.1-SNAPSHOT,表示无法找到HelloFriend所依赖的Hello 0.0.1-SNAPSHOT.jar
故此我们需要重新构建第一个项目Hello并安装到数据仓库,在命令行Hello根目录下执行mvn clean install
对Hello项目进行清理并安装后,对HelloFriend项目再次进行打包
可以看到本次打包成功,说明HelloFriend项目已经可以加载Hello项目所打包的jar包。
2.4 Maven仓库配置
2.4.1 Maven仓库概念
- 何为Maven仓库?
用来统一存储所有Maven共享构建(jar包)的位置就是仓库
- Maven仓库布局
根据Maven坐标定义每个构建在仓库中唯一存储路径
groupId/artifactId/version/artifactId-version.packaging
- 仓库的分类
① 本地仓库
每个用户只有一个本地仓库,自己配置
默认的:~/.m2/repository/ 可修改
② 远程仓库(五个)
中央仓库:Maven默认的远程仓库 http://repo1.maven.org/maven2
私服:是一种特殊的远程仓库,它是架设在局域网内的仓库
阿里、腾讯、华为等
2.4.2 Maven本地仓库配置
- 全局本地仓库(所有操作系统用户均影响)
%MAVEN_HOME%\conf\settings.xml文件,修改该文件会影响所有使用该Maven的用户的本地仓库,例如:
- 用户本地仓库(仅影响使用该配置文件的用户或程序)
该文件可以在任意目录,例如:
- 修改配置文件设置Maven本地仓库(以全局设置为例)
编辑D:\TOOLS\maven\apache-maven-3.5.4\conf\settings.xml文件,找到如下位置:
修改为:
保存退出即可
以上配置表示所有使用该Maven的程序或用户,如未单独配置,则默认加载以上目录的本地库文件;
2.5 IDEA整合Maven项目
2.5.1 IDEA的Maven全局配置
启动IDEA后找到Settings
以上设置完成表示在本idea上,所有项目如未对Maven的配置进行单独配置,则默认均使用该Maven版本和本地库设置;
2.5.2 IDEA创建Maven的Java项目
2.5.3 IDEA创建Maven的Java web项目
见 idea项目搭建的四种方式: 一(以idea2017为例)-CSDN博客
2.6 Maven项目视图
Maven项目视图主要用于查看该maven项目的各项属性,同时也可以进行一些常见的maven的操作,比如打包,清理,测试等等;