Maven介绍:
maven是跨平台的
项目管理工具
,主要服务基于Java平台的
项目构建
、
依赖管理
、
项目信息管理。
它是apache下的一个开源项目,
包含了一个项目对象模型
(Project Object Model)
,一组标准集合,一个项目生命周期
(Project Lifecycle)
,一个依赖管理系统
(Dependency Management System)
,和用来运行定义在生命周期阶段
(phase)
中插件
(plugin)
目标
(goal)
的逻辑。
一、Maven的安装与配置:
1、确认jdk是否已安装,所需jdk版本为1.6以上。
可使用在cmd中使用java-version来查询jdk版本。
2、下载maven,提供3.3.9的版本
链接:
https://pan.baidu.com/s/1HRwf3RZZhSUXBxbBR5ZVIw
提取码:afsz
下载后进行解压缩,路径中最好不要带中文。
3、设置系统环境变量,MAVEN_HOME。
4、设置环境变量Path,将%MAVEN_HOME%\bin加入path中,如果前面有其他内容,注意使用;隔开
检测maven是否安装成功:
在cmd中输入echo %MAVEN_HOME%检测,或者输入mvn -version检测。
如果输出以上内容,证明安装成功。
二、建立第一个maven项目(Hello)
1、在建立maven项目时,需要遵循maven约定的项目目录结构。如图:
建立如图的文件项目结构。
2、在Hello下建立pom.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>csdn.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>
3,在main->java文件夹下:新建csdn文件夹->新建Hello.java文件
public class Hello {
public String sayHello(String name){
return "Hello "+name+"!";
}
}
4、在test->java文件夹下:新建csdn文件夹->新建HelloTest.java文件
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);
}
}
5、打开cmd,进入Hello项目的目录,分别执行:
mvn compile 、mvn clean、 mvn clean compile、 mvn clean test 、mvn clean package,查看根目录的变化
至此,第一个maven项目已构建完毕。
三、仓库
仓库概念:
首次运行完mvn -version后,会在用户目录下创建一个.m2的目录(比如:C:\Users\当前用户名\.m2\),这个目录是maven的“本地仓库”,仓库是maven中一个很重要的概念。
试想一下,我们会在工作中同时创建很多项目,每个项目可能都会引用一些公用的jar包(.NET中是dll文件),一种作法是每个项目里,都复制一份这些依赖的jar包(或dll文件),这样显然不好,相同的文件在硬盘上保存了多份,太占用空间,而且这些依赖的jar包(或dll文件)的版本也不太好管理(比如某个公用的jar包,从1.0升级到2.0,如果所有引用这个jar包的项目都需要更新,必须一个个项目的修改)。
maven的仓库则很好的解决了这些问题,它在每台机器上创建一个本机仓库,把本机上所有maven项目依赖的jar包统一管理起来,而且这些jar包用“坐标”来唯一标识(在第四点中将会讲述),这样所有maven项目就不需要再象以前那样把jar包复制到lib目录中,整个maven项目看起来十分清爽。
仓库分类:
本地仓库:每个用户只有一个本地仓库
默认情况下,不管Linux还是 Windows,每个用户在自己的用户目录下都有一个路径名为 .m2/respository/ 的仓库目录。
Maven 本地仓库默认被创建在 %USER_HOME% 目录下。要修改默认位置,在 %M2_HOME%\conf 目录中的 Maven 的 settings.xml 文件中定义另一个路径。
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>自己仓库的位置</localRepository>
</settings>
远程仓库:
- 中央仓库:Maven默认的远程仓库
- 私服:架设在局域网内的仓库,类似于缓存
- 镜像:用来代替中央仓库,速度比中央仓库快
Maven 仓库默认在国外, 国内使用难免很慢,我们可以更换为阿里云的仓库。
第一步:修改 maven 根目录下的 conf 文件夹中的 setting.xml 文件,在 mirrors 节点上,添加内容如下
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
第二步: pom.xml文件里添加:
<repositories>
<repository>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
四、Maven坐标
maven坐标构成:
- groupId:定义当前maven项目隶属项目
- artificatId:定义实际项目中的一个模块
- version:定义当前项目的版本
- packaging:定义该项目的打包方式
通过maven坐标可以构建一个唯一性 。
五、Maven依赖管理
依赖管理的目的:某些项目构建时,需要依赖于其他项目。
依赖声明主要包含以下元素:
其中依赖范围
scope
用来控制依赖和编译,测试,运行的
classpath
的关系
.
主要的是三种依赖关系如下:
参看
此文章
1.compile
: 默认编译依赖范围。对于编译,测试,运行三种
classpath
都有效
2.test
:测试依赖范围。只对于测试
classpath
有效
3.provided
:已提供依赖范围。对于编译,测试的
classpath
都有效,但对于运行无效。因为由容器已经提供,例如
servlet-
api
(
Tomcat
)
4.runtime:
运行时提供。例如
:
jdbc
驱动
下面建立第二个maven项目:HelloFriend
1、建立与第一个项目相同的目录结构
2、在pom.xml中添加依赖
3,在main->java文件夹下:新建csdn文件夹->新建HelloFriend.java文件
package csdn.maven;
import csdn.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";
}
}
4、在test->java文件夹下:新建csdn文件夹->新建HelloFriendTest.java文件
package csdn.maven;
import static junit.framework.Assert.assertEquals;
import org.junit.Test;
import csdn.Hello;
public class HelloFriendTest {
@Test
public void tesHelloFriend(){
HelloFriend helloFriend = new HelloFriend();
String results = helloFriend.sayHelloToFriend("litingwei");
assertEquals("Hello litingwei! I am John",results);
}
}
5、cmd进入Hello项目的根目录,将Hello项目安装到本地仓库。(此步非常重要,否则后面运行HelloFriend项目时,回报找不到项目依赖的错误)
C:\Users\11659\Desktop\实验报告\maven\maven_project\Hello>mvn clean install
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Hello 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ Hello ---
[INFO] Deleting C:\Users\11659\Desktop\实验报告\maven\maven_project\Hello\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ Hello ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ Hello ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent!
[INFO] Compiling 1 source file to C:\Users\11659\Desktop\实验报告\maven\maven_project\Hello\target\classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ Hello ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ Hello ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent!
[INFO] Compiling 1 source file to C:\Users\11659\Desktop\实验报告\maven\maven_project\Hello\target\test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ Hello ---
[INFO] Surefire report directory: C:\Users\11659\Desktop\实验报告\maven\maven_project\Hello\target\surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running cn.rjxy.maven.HelloTest
hujie maven
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.102 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ Hello ---
[INFO] Building jar: C:\Users\11659\Desktop\实验报告\maven\maven_project\Hello\target\Hello-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ Hello ---
[INFO] Installing C:\Users\11659\Desktop\实验报告\maven\maven_project\Hello\target\Hello-0.0.1-SNAPSHOT.jar to C:\Program Files\Apache\maven-repository\cn\rjxy\maven\Hello\0.0.1-SNAPSHOT\Hello-0.0.1-SNAPSHOT.jar
[INFO] Installing C:\Users\11659\Desktop\实验报告\maven\maven_project\Hello\pom.xml to C:\Program Files\Apache\maven-repository\cn\rjxy\maven\Hello\0.0.1-SNAPSHOT\Hello-0.0.1-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.190 s
[INFO] Finished at: 2019-04-26T16:49:01+08:00
[INFO] Final Memory: 17M/129M
[INFO] ------------------------------------------------------------------------
6,cmd进入HelloFriend的根目录,输入mvn package ,看文件目录结构有什么变化。
七、Maven生命周期
三大生命周期:
- clean:在项目真正构建之前进行一些清理工作
- default:构建项目的核心部分,编译、测试、打包、部署
- site:生成项目报告、站点、发布站点
clean生命周期三个阶段:pre-clean clean post-clean
default生命周期的重要和常用的阶段:
- compile(编译项目的源代码)
- test-compile(编译测试源代码)
- test(使用合适的单元测试框架运行)
- package(接受编译好的代码,打包成可发布的格式)
- install(将包安装至本地仓库,以让其他项目依赖)
- deploy(将包复制至远程仓库,以便其他项目开发人员共享)
site生命周期的阶段:site post-site site-deploy
这三套生命周期相互独立,在一套生命周期之内,如果运行一个阶段命令,则在该阶段之前的命令都会被执行,例如在clean生命周期内,有三个阶段:pre-clean clean post-clean ,如果执行mvn post-clean 则在这之前的阶段都会被执行。这样大大简化了maven命令的输入。
但mvn clean install site 这个命令没有省略写法,因为这三个命令属于三个不同的生命周期。
八、Maven与Eclipse整合
使用link方式(耦合性低,卸载只需修改dropins目录即可):
具体步骤是这样的
:
1
、
获得zest,m2e和m2e-extras三件文件夹
链接:https://pan.baidu.com/s/1bSPmR2Ws8BqCCCnDEfkXEA
提取码:xlqz
2
、
进入到
eclipse
中的
dropins
目录下,新建三个
txt
文件(
zest.link,m2e. link,m2e-extras.link
)。其中每个文件内容如下
:
path=E:/personal/maven/install/GEF-zest-3.7.1
(需将红色的路径修改你本机的实际插件的路径地址)
3、
重新启动
eclipse,
点击
windows
à
preferences
,
成功后看到如下画面
4、给eclipse配置自己下载的maven
5、导入maven项目后:
点击pom.xml—Run
As—Maven
命令
6、新建maven项目:
注:(需保证你的本地仓库有创建项目所需的jar包,很多人刚入门都会报错,具体参看
另一篇博客
)