Maven入门

Maven入门

一、概述

Maven 是 Apache 软件基金会组织维护的一款专门为 Java 项目提供构建依赖管理支持的工具。Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构件,报告和文档的软件项目管理工具。

1、构建

Maven是一个优秀的构建工具。 它能够帮我们自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署。我们不需要也不应该一遍又一遍地输入命令,一次又一次地点击鼠标,我们要做的是使用Maven配置好项目,然后输入简单的命令(如:mvn clean install),Maven会帮我们处理那些烦琐的任务。
Java 项目开发过程中,构建指的是使用原材料生产产品的过程。

  • 原材料

    • Java 源代码
    • html
    • 图片
    • 配置文件
    • 等等文件
  • 产品

    • 一个可以在服务器上运行的项目包

构建过程包含的主要的环节:

  • 清理:删除上一次构建的结果,为下一次构建做好准备
  • 编译:Java 源程序编译成 *.class 字节码文件
  • 测试:运行提前准备好的测试程序
  • 报告:针对刚才测试的结果生成一个全面的信息
  • 打包
    • Java工程:jar包
    • Web工程:war包
  • 安装:把一个 Maven 工程经过打包操作生成的 jar 包或 war 包存入 Maven 仓库
  • 部署
    • 部署 jar 包:把一个 jar 包部署到 Nexus 私服服务器上
    • 部署 war 包:借助相关 Maven 插件(例如 cargo),将 war 包部署到 Tomcat 服务器上

脱离IDE环境构建项目
file

2、依赖

Maven还是一个依赖管理工具和项目信息管理工具。它提供了中央仓库,能帮我们自动下载构件。
file
如果 A 工程里面用到了 B 工程的类、接口、配置文件等等这样的资源,那么我们就可以说 A 依赖 B。例如:

  • junit-4.12 依赖 hamcrest-core-1.3
  • thymeleaf-3.0.12.RELEASE 依赖 ognl-3.1.26
    • ognl-3.1.26 依赖 javassist-3.20.0-GA
  • thymeleaf-3.0.12.RELEASE 依赖 attoparser-2.0.5.RELEASE
  • thymeleaf-3.0.12.RELEASE 依赖 unbescape-1.1.6.RELEASE
  • thymeleaf-3.0.12.RELEASE 依赖 slf4j-api-1.7.26

依赖管理中要解决的具体问题:

  • jar 包的下载:使用 Maven 之后,jar 包会从规范的远程仓库下载到本地
  • jar 包之间的依赖:通过依赖的传递性自动完成
  • jar 包之间的冲突:通过对依赖的配置进行调整,让某些jar包不会被导入

二、安装与配置

可以不安装,在IDE中使用自带(防止兼容性问题)的Maven

1、下载

http://maven.apache.org/download.cgi

2、安装

1)解压到指定目录

注意:

  • Maven依赖于Java,因此必须保证已经安装JDK,并配置好环境变量
  • 路径不要存在中文或空格

2)配置环境变量

可以不配置,在IDE中使用绝对路径指向Maven

  • MAVEN_HOME或M2_HOME:指定Maven根目录
  • Path:指定Maven相关的命令程序所在的bin目录
2.1)Linux或Mac
# 编辑用户目录下的.bash_profile文件
$ vim .bash_profile

########### Maven1.0 Evn ##################
# export MAVEN_HOME=/Users/circleus/apache-maven-3.5.4
# export MAVEN_HOME=/Users/circleus/aliyun-maven-3.6.0
# export PATH=$MAVEN_HOME/bin:$PATH

########### Maven2.0 Evn ##################
# export M2_HOME=/Users/circleus/aliyun-maven-3.6.0
# export M2_HOME=/Users/circleus/apache-maven-3.5.4
# export PATH=$PATH:$M2_HOME/bin

########### Maven3.0 Evn ##################
# export PATH=/Users/circleus/aliyun-maven-3.6.0/bin:$PATH
2.2)windows
  • MAVEN_HOME:d:\java\apache-maven-3.6.3
  • Path:%MAVEN_HOME%\bin

cmd命令行:mvn -v测试

3)目录结构

  • bin目录:包含mvn的运行脚本
  • boot目录:包含一个类加载器的框架,maven使用它加载自己的类库
  • conf目录:存放配置文件的目录(核心配置文件settings.xml文件)
  • lib目录:包含maven运行时的依赖类库

3、配置

1)配置本地仓库

<!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
-->
<localRepository>/Users/zing/java/local-repository</localRepository>

http://www.mvnrepository.com/

2)镜像仓库

可以不用配,直接使用魔法(科学上网)

<!--阿里云Maven镜像配置--> 
<mirror>
  <id>nexus-aliyun</id>
  <mirrorOf>*</mirrorOf>
  <name>Nexus aliyun.</name>
  <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

4、常用命令

  • mvn
    • -v :查看maven版本
    • compile:编译
    • package:打包
    • test:测试
    • clean:清除target
    • install:安装jar包到本地仓库中

三、创建Maven项目

1、手工创建

1)Maven项目目录结构

  • 项目名称
    • src:项目源码
      • main:存放主程序
        • java:存放Java源码
        • 包名+类名
        • resoures:存放资源文件
        • webapp:web资源
        • WEB-INF
          • web.xml
      • test:存放测试程序
        • java:存放Java测试源码
        • 包名+类名
        • resoures:存放资源文件
    • target:此目录由maven生成
    • pom.xml:Maven项目核心配置文件

2)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>

  <!-- 项目坐标:GAV -->
  <groupId>edu.nf</groupId>
  <artifactId>demo</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>demo</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

说明:

  • 项目的GAV坐标
    • groupId:包名(公司或组件域名倒序).项目名
    • artifactId:项目名-模块名
    • version:指定版本
  • dependencies:依赖列表,指定本项目所依赖的第三方工具(构件/jar)
  • archetype插件——自动创建符合maven规定的目录骨架
    • 方法一:mvn archetype:generate
    • 方法二:
    • 第一次构建需要连接网络,从官网下载相关的插件
    • 可以配置国内镜像解决
mvn archetype:generate -DgroupId=组织名(公司网址的反写+项目名)
                       -DartifactId=项目名-模块名(唯一的标识)
                       -Dversion=版本号
                       -Dpackage=代码所存在的包名

mvn archetype:generate -DgroupId=org.nf.sms -DartifactId=sms-entity -Dversion=1.0-SNAPSHOT -Dpackage=org.nf

GAV坐标

1、概念

  • 在仓库中的包的唯一标识,就像人的身份证号码一样
  • 唯一标识依赖的某个构件(jar,war)

2、组成

  • groupId:项目名称,定义当前Maven项目隶属的实际项目
    • 公司或组织域名倒序+项目名称,如:org.zing.shop
  • artifactId:模块名称,定义实际项目中的一个模块
    • 一个项目可以包含多个模块或工程,如:shop-user、shop-order、shop-product等
  • version:版本号
    • x.x.x-yyyy

3、语法

<groupId>公司或组件域名倒序.项目名</groupId>
<artifactId>项目名-模块名</artifactId>
<version>x.x.x-yyyy</version>
<!--
  第一个x表示大版本号
  第二个x表示分支版本号
  第三个x表示小版本号
  yyyy可以指定为:
   snapshot:快照
   alpha:内部测试
   beta:公测
   release:稳定
   GA:正式发布
-->