Maven学习总结(一)

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-apiTomcat

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包,很多人刚入门都会报错,具体参看另一篇博客

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值