maven 课堂笔记

maven教程

一:简介

1、什么是maven?

apache maven是一个软件项目和构建工具,可以帮助我们创建和管理项目

2、为什么要使用maven?

2.1、项目的管理工具

当项目的规模很大时需要进一步将项目进行拆分,将一个项目拆分成多个模块,模块与模块之间存在一种依赖关系,使用maven的依赖管理机制帮助我们在模块间建立这种依赖关系.

2.2、jar包的管理工具
  • 通过仓库管理jar包
  • 解决jar包的依赖
  • 自动下载jar包
2.3、自动化构建工具

构建过程:编写代码—》编译(测试)代码---->生称测试报告—>打包------>部署

3、术语

3.1、中央仓库

是一个网络仓库,存储jar包或者maven插件

http://repo1.maven.org/maven2/

3.2、本地仓库

从中央仓库下载的jar包的存放位置,它也是一个仓库,这个仓库不在远程,在本地电脑上.

3.3、镜像仓库

对某一个仓库的镜像

阿里云提供的http://maven.aliyun.com/nexus/content/groups/public/

3.4、私服

在局域网内搭建的maven服务器

3.5、各个仓库之间的关系

![01](file:///D:/2019project/project3/myWeb/pic/01.jpg?stamp=0)

二:安装maven

1、下载安装包

apache-maven-3.2.5-bin.tar

2、解压缩

解压到无中文、无空格的路径上,不需要安装

3、配置环境变量

3.1、windows
  • maven依赖于JAVA_HOME
echo %JAVA_HOME%   --windows
echo $JAVA_HOME    --LINUX
  • maven环境变量
M2_HOME=Maven安装目录
PATH=原来的PATH;%M2_HOME%/bin
  • 测试
在控制台输入命令:mvn  -version
如果输出以下提示,表时maven创建成功

C:\Users\hellboy>mvn -version
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-15T01:29:23+08:00)
Maven home: D:\maven\apache-maven-3.2.5
Java version: 1.8.0_171, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_171\jre
Default locale: zh_CN, platform encoding: GBK
3.2、linux/mac
  • 编辑/home/soft01/.bashrc文件,在这个文件的最后添加两行代码
cd /home/soft01
tar zxf apache-maven-3.2.5-bin.tar.gz
vi .bashrc
在该文件的最后加上两句话
export M2_HOME=MAVENA安装目录
export PATH=$PATH:$M2_HOME/bin
  • 使修改立即生效
source .bashrc
  • 测试:mvn -version
如果输出以下提示,表时maven创建成功

C:\Users\hellboy>mvn -version
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-15T01:29:23+08:00)
Maven home: D:\maven\apache-maven-3.2.5
Java version: 1.8.0_171, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_171\jre
Default locale: zh_CN, platform encoding: GBK

4、配置本地仓库

4.1、本地仓库的默认位置
~\.m2\repository
4.2、修改本地仓库的位置

编辑conf/settings.xml

<localRepository>E:\maven\mvn_rep1</localRepository>
4.3、测试
cd maven/maven-proj
mvn archetype:generate   #创建一个maven 项目

5、配置镜像仓库

编辑conf/settings.xml

<mirror>
  <id>aliyun</id>
  <mirrorOf>*</mirrorOf>
  <name>aliyun maven</name>
  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>

</mirror>

6、配置maven的jdk版本

默认使用maven创建的项目使用的jdk版本是1.5

修改conf/settings.xml

<profile>
  <id>jdk‐1.8</id>
  <activation>
    <activeByDefault>true</activeByDefault>
    <jdk>1.8</jdk>
  </activation>
  <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
  </properties>
</profile>

三:创建maven项目

1、java项目的创建

1.1、目录结构

java工程约定的目录结构:

|项目名称
  	|src  //程序代码
  		|main   //程序主代码目录
            |java
  			//java源代码,相当于传统项目的src
            |resources   //配置文件
  	          |//用于存放主代码中用到的配置文件
         |test   //测试代码主目录
             |java
  			//测试源代码,其目录结构与main一致
             |resources   //配置文件
  	           |//用于存放测试代码中用到的配置文件
  
    |pom.xml  //maven的核心配置文件
1.2、基本操作

1、创建java项目

最常见的maven骨架插件
maven-archetype-quickstart  //用于创建java模块(默认)
maven-archetype-webapp      //用于创建web模块
mvn archetype:generate    //默认创建的是java模块
  
  
archetype:(maven-archetype-quickstart )//使用骨架创建java项目
groupid:com.zte.ums  //指定组织域名的反向+项目名
artifactId:ums-dao   //指定模块名
vetrsion:1.0.1       //版本
package:com.zte.ums  //包名

2、创建web项目

2.1、目录结构
|项目名称
  	|src  //程序代码
  		|main   //程序主代码目录
            |java
  			//java源代码,相当于传统项目的src
            |resources   //配置文件
  	          |//用于存放主代码中用到的配置文件
            |-webapp  //网站根目录,相当于传统web项目的webRoot
               |-WEB-INF
                  |-web.xml
         |test   //测试代码主目录
             |java
  			//测试源代码,其目录结构与main一致
             |resources   //配置文件
  	           |//用于存放测试代码中用到的配置文件
  
    |pom.xml  //maven的核心配置文件
2.2、基本操作

1.创建web项目

mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp

2.执行maven操作

mvn  clean
mvn  compile

四:MAVEN命令

1、常见命令

命令作用功能描述
archetype创建maven项目根据模板生成项目骨架
clean清理删除target目录
compile编译将main中的源代码编译成字节码,放到target/classes目录下
test测试编译测试类到target/test-classess目录,执行并生成测试报告
package打包将java模块打包成一个jar包,将web模块打包成war包
install安装将项目的jar(war)包安装到本地仓库,供其它项目使用
deploy发布将项目的jar包安装到中央仓库,供其它项目使用,需要账号、密码
site生成站点生成关于项目介绍的网页
validate验证验证工程是否正确,所需的信息是否完整

注意事项:

  1. 所有的命令都要跟在mvn的命令后面:如:mvn test
  2. 除了archetype命令外其它所有命令都对应模块的根目录下执行,和pom.xml平级的目录
  3. 多个命令可以同时执行,如:mvn clean test

2、生命周期

maven定义了三套生命周期:clean default site

每个生命周期之间是相互独立的,每个生命周期包含多个阶段,这些阶段又是有顺序的,后续的阶段需要等待前面的阶段执行完成后继续,

clean:clean

default:compile test packaage install

site:site

例如:清空后安装:mvn clean install

五:在IDEA中使用Maven

1、配置maven

注意:这两个配置在切换工作空间后,都需要重新指定,font,encoding,subversion也需要重新设置

  • 自动更新项目:勾选import maven projects automatically
  • 指定maven安装目录和配置文件

![03](file:///D:/2019project/project3/myWeb/pic/03.jpg)

![02](file:///D:/2019project/project3/myWeb/pic/02.jpg)

六:pom.xml

1、简介

pom:project object model 项目对象模型

pom.xml是maven的核心配置文件

一个maven模块有且仅有一个pom.xml文件,该文件必须在模块的根目录下

2、坐标

2.1、什么是坐标?

用来唯一的标志每一个标志,必须为项目定义坐标,坐标必须唯一

目的:为了让其它的maven项目使用该项目生成的jar包

2.2、坐标详解

maven坐标是通过一些元素来定义:groupid,artifactid,version

<!--
    坐标:
    groupId:组织id,表示模块所隶属的项目
    artifactId:模块id
    version:当前的版本
-->
<groupId>com.zte.maven</groupId>
<artifactId>maven01</artifactId>
<version>1.0-SNAPSHOT</version>

3、dependency

3.1、基本配置

如何查找一个jar包的坐标?

http://repo1.maven.org/maven2/

<dependencies>
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.38</version>
    <!--pom.xml中配制的路径和本地仓库中真实路径的关系
 本地仓库路径/groupId/artifactId/version/artifactId-version.jar
 -->
  </dependency>


  <dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
  </dependency>

  <dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
  </dependency>
3.2、scope作用域

表示依赖的作用域,用来配置依赖的jar包可以作用的范围

取值含义举例
compile表示该依赖可以在整个模块中使用,参与打包部署,默认值commons-fileupload
test该依赖只能在测试代码中使用,不参加打包部署junit
provided表示该依赖在写代码时需要,不参与打包部署servlet
runtime表示该依赖写代码时不需要,运行时需要,参与打包部署mysql驱动
system表示使用本地系统路径下的jar包,需要和systemPath配合使用oracle驱动

4、properties

全局属性,一般情况下用于定义全局的jar包版本号

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <maven.compiler.source>1.7</maven.compiler.source>
  <maven.compiler.target>1.7</maven.compiler.target>
  <junit.version>4.11</junit.version>
</properties>

5、plugins

配置插件

  • tomcat maven插件(注意:模块必须为web模块)
<plugin>
  <groupId>org.apache.tomcat.maven</groupId>
  <artifactId>tomcat7-maven-plugin</artifactId>
  <version>2.2</version>
  <configuration>
    <path>/maven02</path>
    <port>8888</port>
  </configuration>
</plugin>

七:maven中的关系

三大关系:继承 、聚合、依赖

1、继承

一个maven项目可以继承自另一个maven项目,分别称之为子项目,父项目

场景:多个子项目中使用到相同的依赖或者插件,此时可以把相同的配置抽取到父项目中,进行统一的管理,保持其一致性

  1. 将父项目的打包方式设置为pom
<!--
打包方式
jar:java项目的打包方式,默认方式
war:web项目的打包方式
pom:父项目的打包方式
-->
<packaging>pom</packaging>
  1. 在子项目child01,child02中引用父项目,指定父项目的坐标
<!--引用父项目,指定父项目的坐标-->
<parent>
  <groupId>com.zte.maven</groupId>
  <artifactId>parent</artifactId>
  <version>1.0-SNAPSHOT</version>
  <!--指定父项目的pom.xml文件的相对路径-->
  <relativePath>../parent/pom.xml</relativePath>
</parent>

问题:有时并不是父项目的所有依赖需要被子项目继承,但是又希望通过父项目对依赖进行统一管理,如何进行版本控制?

解决方法:使用dependencyManagement

<dependencyManagement>
  <dependencies>

    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.1</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>

    <dependency>
      <groupId>commons-dbcp</groupId>
      <artifactId>commons-dbcp</artifactId>
      <version>1.4</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.38</version>
    </dependency>

  </dependencies>
</dependencyManagement>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值