Maven初体验

我是前言

在阅读了官方文档以及自己动手实践后,写下这篇笔记用以记录自己的学习过程。所有关于maven的操作都基于命令行。

安装

安装maven之前,需要先装Java环境。maven的安装文件是个压缩包,访问maven官网,点击左侧导航栏的download,选择files列表中的其中一种压缩包,我使用的是windows,故选择下载.zip文件。下载好之后解压缩,配置环境变量,将解压后的bin目录添加到系统Path中。打开cmd,输入mvn -version,若显示maven的版本信息,说明安装成功。此过程比较简单。

使用maven创建简单Java项目

打开cmd,切换到某一目录,比如maven-learning,执行命令

mvn -B archetype:generate \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DgroupId=com.example.maven00 \
    -DartifactId=maven00

注意,反斜杠只是为了说明此命令应写在一行,不应写出。
若首次执行此命令,则maven会下载所需插件,需要等待一段时间。命令执行之后,发现maven-learning目录下生成了一个maven00的目录,此maven00便是刚才命令行中指定的-DartifactId参数。maven00的目录结构如下所示

maven00
|-- pom.xml
`-- src
    |-- main
    |   `-- java
    |       `-- com
    |           `-- example
    |               `-- maven00
    |                   `-- App.java
    `-- test
        `-- java
            `-- com
                `-- example
                    `-- maven00
                        `-- AppTest.java

该目录结构是maven自动生成的,或者说,要想让maven更好地管理项目,就应该按照这种结构布局,这是约定俗成的(convention)。
maven00目录下有一个pom.xml文件和src目录。maven使用pom(Project Object Model)描述、配置和管理项目,其生成的内容如下所示:

    <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/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.example.maven00</groupId>
      <artifactId>maven00</artifactId>
      <packaging>jar</packaging>
      <version>1.0-SNAPSHOT</version>
      <name>maven00</name>
      <url>http://maven.apache.org</url>
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
    </project>

在groupId之前的内容大致是固定的写法,不用理会。

  • groupId 该内容由刚才生成项目命令中的-DgroupId参数指定。由两部分组成,组织或公司的唯一标识(一般是域名的反写)+项目名。
  • artifactId 模块在项目中的唯一标识,一般是项目名+模块名;
  • packaging 指打包后的文件格式,默认为JAR,也可以是WAR,EAR等;
  • version 该项目的版本号。打包后的文件名称格式为项目名-版本号, 即artifactId-version,后缀就是packaging中所指定的格式。从上面的内容来看,打包后的文件为maven00-1.0-SNAPSHOT.jar。需要注意的是版本号中有个SNAPSHOT(快照),表示当前版本是开发版(development),若不写SNAPSHOT,而直接是1.0,说明该版本是发行版(release),若再次从1.0发行版进入开发版,则版本号应该写成1.1-SNAPSHOT,以此类推。
  • name和url 该项目显示的名称以及url,用于生成文档。
  • ** dependencies ** 该项目的依赖项,因为使用了junit进行测试,故添加junit依赖项。依赖项单独研究,这里先略过。

再来看src中的内容。src中包含两个目录,main和test,分别表示项目的主源代码目录和测试源代码目录。它们的目录结构大致一样,java文件所属的包也一致,所以只看main目录。

main目录下有一个java目录,java目录下是包结构,包里面是java文件。为什么要有一个java目录,而不直接是包结构?因为跟java目录同级的还可能有一个resources目录,代表项目的资源目录,在打包的时候也会包含在内。默认是没有资源目录的,需要时添加即可,但要注意resources的名称要写对,否则maven不能识别。

测试项目

在项目根目录下,运行命令mvn test,即可编译和测试项目。注意cmd当前所在的目录一定要是根目录,即包含了pom.xml的目录。初次运行,同样会下载运行所需插件。控制台输出的提示信息,经过删减,大致如下所示:

[INFO] Scanning for projects...
[INFO] Building maven00 1.0-SNAPSHOT
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven00 ---
[INFO] skip non existing resourceDirectory <dir>\maven-learning\maven00\src\ma
in\resources
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ maven00 ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to <dir>\maven-learning\maven00\target\classes
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ maven00 ---
[INFO] skip non existing resourceDirectory <dir>\maven-learning\maven00\src\te
st\resources
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ maven00 ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to E:\code\maven-learning\maven00\target\test-classes
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ maven00 ---
[INFO] Surefire report directory: <dir>\maven-learning\maven00\target\surefire
-reports
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.example.maven00.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

第一行的Scanning for projects...应该就是在扫描pom.xml文件和项目结构了,所以mvn test命令一定要在项目根目录下执行。可以看到,该过程大致分为五个步骤:default-resources default-compile default-testResources default-testCompile default-test

  • ** default-resources ** 这是在处理主源程序中的资源文件,但由于main目录下没有resources目录,故跳过(skip)该过程。若只处理到这一步而不往后执行,则使用mvn process-resources命令即可。

  • ** default-compile ** 这是在编译主源程序中的代码,具体而言,是编译App.java文件。若只想进行到这一步,使用mvn compile命令即可。

  • ** default-testResources ** 处理测试源程序中的资源文件,与default-resources类似。若只想进行到这一步,则使用mvn process-test-resources命令即可。

  • ** default-testCompile ** 编译测试代码,具体而言,是编译AppTest.java文件。若只想进行到这一步,则使用mvn test-compile命令即可。

  • ** default-test ** 最后这一步,是运行测试用例,后面就是测试运行报告了。

所有这些流程都顺利走完后,项目根目录会生成一个target目录,存放项目的输出文件。

项目打包并安装

使用mvn package打包项目,打包后的文件名为maven00-1.0-SNAPSHOT.jar,存放在target目录下。使用mvn install命令将包安装到本地仓库中。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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

推荐阅读更多精彩内容