Maven的基本概念

Maven的基本概念

[toc]

Maven可以帮助我们做什么

如果只是一个简单的项目(例如只有一个Java文件的一个主函数,也不需要依赖其他的Jar包等),就不需要使用项目构建管理工具。而在大型项目开发过程中需要非常多的步骤:build,test,deploy,publish等,并且在开发过程中也需要依赖各种外部的Jar包来提升开发效率,就需要一个对项目构建的管理工具——Maven。

Maven主要提供了以下的几个功能:

  1. repo(仓库的管理):开发项目过程中,我们需要引入其他的Jar包,在maven中可以指定获取Jar包的仓库。

  2. dependency(依赖管理):开发项目过程中,我们需要引入第三方的jar包(不同的版本,以及多个Jar之间的依赖),在maven中都可以解决。

  3. lifecycle(生命周期管理):在maven的构建中被划分为多个阶段(生命周期),构建的过程也是按照生命周期进行执行。

image.png

Maven的安装

Mac或者Linux上安装

  • 下载Mavne binary 包
wget https://mirrors.ocf.berkeley.edu/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
  • 解压
tar -xvzf apache-maven-3.6.3-bin.tar.gz
mvn apache-maven-3.6.3-bin.tar.gz maven
  • 修改PATH变量
cd maven/bin
export PATH=$PATH:`pwd`

或者将对应的maven bin添加到 ~/.bashrc中,例如添加如下内容

MAVEN_HOME=your maven home
PATH=$PATH:$MAVEN_HOME/bin
export PATH
  • 测试mvn是否正常执行
mvn --version

如果产生如下的内容,表示安装成功


image.png

使用Maven构建一个项目

  • 创建maven项目
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false

进入到my-app项目以后会发现一个pom.xml的文件,maven项目的整个构建过程都是通过这个文件进行管理和控制的。由于pom.xml文件非常复杂,当前阶段不需要全部理解,仅仅需要知道一些主要的内容和模块,后期在使用其他功能的时候再进行详细的补充与介绍。

<?xml version="1.0" encoding="UTF-8"?>

<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>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>my-app</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

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

上述xml文件中,包含了pom的最基本的内容:

  1. groupid:项目归属的组织
  2. artifactid:工程项目的名字
  3. version:表示项目的版本
  4. dependencies:项目依赖的jar包

更加深层次的pom介绍可以参考Introduction to the POM

  • build项目

在my-app目录下执行mvn package命令,可以将项目进行build,产生对应的Jar包。

创建maven项目和构建maven项目分别使用了maven中的两个概念:goalphase,其中mvn archetype:generate 表示执行了maven中的一个goal;mvn package表示执行maven中的一个phase。

下面将详细介绍goal和phase的概念。

Maven的几个核心概念

生命周期(phase):maven将构建项目的过程进行了抽象,抽象出来了一个过程,这个过程被称作生命周期(lifecycle)。lifecycle是有多个有序的阶段(phase)构成的。

阶段(phase):maven将lifecycle划分为多个有序的过程(step),每一个过程被称作一个阶段(phase)。

目标(goal):goal在maven中是真正执行任务的单元,goal的提供者是插件(plugin),每一个plugin可能提供多个goals。例如 mvn compiler:compile表示了一个goal,其提供者是插件 compilercompiler其实是这个插件的缩写,其完整的插件名字为org.apache.maven.plugins:maven-compiler-plugincompile仅仅是这个一个插件中的一个goal。

三者之间的管理:goal是一个执行任务的最小单元,每一个goal都是由其对应的plugin提供的;可以将对应的goal绑定到某个phase上,当在进行maven构建的过程中只要执行到了对应的phase上,就可以在当前phase上完成goal的执行。

扩展内容

Maven中的plugin与goal

Maven的生命周期与phase

参考材料

Maven Goals and Phases

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容