Maven 快速入门

官网:https://maven.apache.org/index.html
POM 参考文档: https://maven.apache.org/pom.html
Settings 参考文档: https://maven.apache.org/settings.htmlhtml

1、简介

Maven 是一个用于构建/管理任何基于Java项目的工具,其自己也是基于Java的 所以须要Java环境。其最初是为了简化 Jakarta Turbine 项目的构建而生。java

其主要处理如下关心的领域:web

  1. 使构建过程更简单:使用 Maven 并不能消除对底层机制的了解须要,但仍能使开发者规避不少细节。
  2. 提供统一的构建系统:Maven 使用 POM(project object model,项目对象模型)和插件集构建项目。一旦你熟悉一个 Maven 项目,则会知道全部 Maven 项目的构建。
  3. 提供高质量的项目信息:Maven 提供了有用的项目信息,一部分来自 POM,一部分生成自源码。(注:这部分不会太经常使用到,属于 reporting 模块,即经过调用 "mvn site",运行一个 Server,在网页上展现项目相关信息报告,如图所示。详情可参考: Apache Maven Site Plugin, Configuring Reports
  4. 提供最佳的项目开发指导:Maven 意在收集当前最佳实践开发原则,并使其变得更简单以指导项目方向。
    例如:
    • 目前单元测试这一最佳实践做为了指导,单元测试的规范、执行、报告在 Maven 中做为了一般构建声明周期的一部分。
    • Maven 还协助项目工做流(workflow),例如发布(release)和问题管理(issue management)。
    • Maven 在项目目录结构的布局上也给出了一些指导建议,一旦你熟悉了这布局,能够很容易游览其余Maven项目。
      Maven 在项目布局上较为坚持,虽然 Maven 设计为了灵活适应不一样项目的须要,但它不可能在不影响目标的状况下知足每一种不寻常结构的项目。所以若不能被从新组织,可能不得不放弃一些特性或Maven使用。

2、安装

  1. 系统要求:
    • Maven 3.3+ 须要 JDK1.7
    • JAVA_HOME 环境变量确保指向了JDK目录
  2. 下载/安装:
    2.1 Maven 官方提供现成 binary 分发: https://maven.apache.org/download.cgi
    2.2 解压后将 bin 目录添加进 PATH 便可
    image

3、简单使用

  1. 利用原型(Archetype)生成简易项目结构:
    1.1 在 PowerShell中执行:mvn archetype:generate "-DgroupId=com.mycompany.app" "-DartifactId=my-app" "-DarchetypeArtifactId=maven-archetype-quickstart" "-DarchetypeVersion=1.4" "-DinteractiveMode=false"
    1.2 修改"pom.xml"添加如下内容,声明 Java源码版本信息
    <properties>
    	<maven.compiler.source>11</maven.compiler.source>
    	<maven.compiler.target>11</maven.compiler.target>
    </properties>
  2. 进入目录,并打包成 jar
    cd maven-sample
    mvn package  //mvn会自动下载打包所需组件
  3. 执行测试
    java -cp .\target\maven-sample-1.0-SNAPSHOT.jar top.simpleito.demo.App

4、主要模块/知识

1. 标准目录布局(Standard Directory Layout)

https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
注:apache

  • 标准目录布局同时也是用 Maven 构建的默认值,好比哪里是java源码,测试目录在哪,输出目录是什么等等。
  • 如下有些描述暂时以为模糊也不要紧,一些部分并不常见 笔者也没用过,像 it / filters / site / assembly等,临时有大体概念便可。
  • 从官方示例看,java 源码包结构只要求和 groupId 相同便可,而不要求加一层 artifectId 的父包。但实际项目各类都有
maven-project
    ├───pom.xml  项目描述文件,定义在生命周期中所需的依赖和所需模块等等
    ├───README.txt  项目说明
    ├───NOTICE.txt  项目中使用第三方库的资料
    ├───LICENSE.txt  许可文件
    └───src  包含构建项目所需全部资料,site等等
        ├───main  最重要的目录,全部工件(artifect)都应出如今这里
        │   ├───java  工件Java源码
        │   ├───resources  配置及资源等文件
        │   ├───filters  包含在构建阶段将值注入到resources目录下配置属性的文件
        │   └───webapp  对于web应用,包含诸如JS/CSS/HTML等资源文件
        ├───test  全部测试代码及资源
        │   ├───java
        │   ├───resources
        │   └───filters
        ├───it  一般是用于 Maven Failsafe Plugin 的集成测试
        ├───site  使用 Maven Site Plugin(https://maven.apache.org/plugins/maven-site-plugin/index.html) 建立的site文档
        └───assembly  二进制打包装配配置,通常也不经常使用适用 Apache Maven Assembly Plugin
    └───target  用于容纳 build 的全部输出

2. POM(Project Object Model,项目对象模型)

https://maven.apache.org/guides/introduction/introduction-to-the-pom.html
POM 是 Maven 中的基本工做单元,它是一个 XML 文件,包含了"项目有关信息"和"配置Maven构建项目的细节"。
当执行一个任务时,Maven 会在当前目录寻找 POM 文件,从而读取所需的配置信息。
POM 中能够指定许多信息,包括:app

  • 依赖(dependencies)、插件(plugins) 或 可被执行的目标(goal)、构建配置(profiles)等。
  • 以及关于项目的自己的信息,如 版本(version)、说明(description)、开发人员(developers)等

需注意的是:POM 中的<groupid>:<artifactId>:<version>构成了该工件的彻底限定名
关于 POM、Super POM、最小POM等更多信息参考:Maven POM 详解框架

3. Settings(Maven自己设置)

https://maven.apache.org/settings.html
settings.xml 包含对 Maven 自身的配置,不该绑定到任何特定项目分发给用户。主要包含:本地储存库,代理,身份验证信息等等。webapp

该配置文件可能存在两个位置:maven

  • 全局的设置:${maven.home}/conf/settings.xml
  • 用户级设置:${user.home}/.m2/settings.xml 【默认状况下可能不存在,可copy全局过来修改】

若都存在,则内容将被合并做用。优先级:用户级 > 全局
配置详情参考:Maven Settingside

4.Build Lifecycle(构建生命周期)

https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
Maven 基于生命周期的概念,意味着构建(build)和分发(distributing)特定工件的过程得以清晰定义,意味着只需学习一小组命令,便可构建任何 Maven 项目。工具

有三种内置构建生命周期(build lifecycle):默认(default)、清理(clean)、site
需注意:

  1. 构建生命周期由构建阶段(build phases)组成,每一个阶段都是生命周期中的一个步骤(stage),
  2. Maven 命令格式:mvn [options] [<goal(s)>] [<phase(s)>],可按需执行某个 phase
  3. build phase 将按顺序执行,例如若执行 mvn install,将会执行在此以前的全部 phase
  4. build phase 又是由声明插件所引入的插件目标(plugin goals)组成的。
    一个 plugin goal 表明一个特定的任务(比phase更精细),它可能被绑定到零个或多各 build phase,不绑定的 plugin goal 可在 build lifecycle 以外直接自行执行

以 default 声明周期为例,主要包含如下 phase:完整的请参考 Lifecycle Reference

  • validate:验证项目是否正确,全部必要信息是否提供
  • compile:编译项目源码
  • test:使用合适的单元测试框架测试编译后的源码。这些测试代码不要求被打包或部署
  • package:将编译后的代码打包为分发格式,例如 JAR
  • verify:运行继承测试的全部检查,以确保符合标准
  • install:将 package 安装到 Locale Repository(本地仓储),用做其余项目依赖
  • deploy:将最终 package 复制到 Remote Repository(远程仓储)

附/参考:

相关文章
相关标签/搜索