POM

  就像Make的Makefile,Ant的build.xml一样,Maven项目的核心是pom.xml。POM(Project Object Model项目对象模型),定义了项目的基本信息,用于描述项目如何构建,声明项目依赖等等。

  我们先来建立一个经典的Hello world Maven项目。

  先建立一个helloworld文件夹,在文件夹中新建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/maven-4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.j1.hhl</groupId>
<artifactId> hhl-helloworld</artifactId>
<version>1.0.0-SNAPSHOT</version>
<package>war</package>
<name>MAVEN HELLO WORLD PROJECT</name>
</project>

  代码的第一行是XML头,指定了该xml文档的版本和编码方式。紧接着是project元素,project是所有pom.xml元素的根元素,它声明了一些POM相关的命名空间及xsd元素,虽然这些属性不是必须的,但使用这些属性能使第三方工具帮助我们快速编辑POM。

根元素下的第一个元素modelVersion指定了当前POM模型的版本,对于Maven2和Maven3,它只能是4.0.0。

这段代码中最重要的是groupId,artifactId,version,这三个元素定义了一个项目的坐标。

groupId定义了项目属于哪一个组,这个组往往和项目所在组织或者公司存在关联。譬如,j1公司有一个app项目叫hhl,则groupId为com.j1.hhl。

artifactId定义了当前Maven项目在组中唯一的ID,譬如,我们在hhl项目中把登录功能单独出来作为一个项目,那么登录项目artifactId即可为hhl-helloworld。一般情况下,artifactId的前缀为组groupId最后一个属性名,例如本例中的hhl。

version指明了当前Maven项目的版本号,分为发布版本和快照版本。

  package项目打包类型,如果不声明,默认即为jar,也可以显式声明为war。

name 声明了对于用于一个更为友好的项目名称,方便信息交流。

没有任何实际的java代码,我们就可以定义一个Maven的POM。这体现了Maven能够将项目对象模型与java代码最大程度的相互独立,俗称解耦或者正交性。这在很大程度上避免了java代码和POM代码相互影响。

   Maven主代码(编译 mvn clean complier)

主代码与测试代码不同,项目主代码会被打包到最终构建中,而测试代码不会。本着约定大于配置的原则,我们一般将主代码放在src/main/java中,这里有一点需要注意,我们在给类取名的时候,注意尽量保持与POM中groupId和artifactId一致,如上述POM,我们的主代码应该在com.j1. hhl.helloworld包下。

Maven测试代码(测试 mvn clean test)

测试代码一般放在src/main/test中,我们可以使用标准的单元测试,这里提前用到Maven项目依赖的功能:我们先在POM引入Junit jar包,代码如下

<?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/maven-4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.j1.hhl</groupId>
<artifactId>hhl-helloworld</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>MAVEN HELLO WORLD PROJECT</name>
      <package>war</package>
<dependences>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8</version>
<scope>test</scope>
</dependency>
</dependences>
</project>

  dependences声明项目依赖,可以有多个,dependency下有groupId,artifactId,version有了这三个属性的声明,Maven会自动下载junit-4.8.jar构建,以为项目所用。那么这个jar是从哪里来的呢?先从中央仓库下载到本地,再从本地引入到项目中。Scope声明依赖范围,test说明依赖只对测试有效,如果不显示声明依赖范围,则默认为complier,则测试和主代码都有效。具体测试类写法和一般单元测试类写法一样。项目在测试之前,会执行编译工作。

  打包(mvn clean package)和安装(mvn clean install)

将项目进行编译测试之后,下一个重要步骤就是打包,helloword项目中,我们指定打包类型为war包,同样在打包之前,会执行编译和测试的工作,在本例中,打包之后默认会生成一个名为hhl-helloworld-1.0.0-SNAPSHOT.war文件(文件命名规则为artifactId+version+文件后缀),此文件位于Maven的输出目录target中,如果有必要,我们也可以在POM声明finalName来自定义的打包名称。如果想让打包的类被其他Maven项目所用,我们还需要做最后一步,即安装。在执行安装操作之前,先回运行编译、测试、打包三步操作,等安装完之后,会自动将打包完后的构建上传到本地Maven仓库中,这样只有其他Maven项目在POM中定义

<dependences>
<dependency>
<groupId>com.j1.hhl</groupId>
<artifactId>hhl-helloworld</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
</dependences>

就可以使用war包中的类了。

   以上从编译到测试,从测试到打包,再从打包到安装我们都走了一遍,值得一提的是,在执行当前步骤前,会将之前所有步骤重新再走一遍。需要注意的是,执行上面四个步骤,其实质是由四个插件来完成的,这一点对于理解Maven构建的生命周期有特别的意义

  使用Archetype快速创建项目结构

在上面helloworld项目中,我们有意约束大家项目的结构,比如我们将主代码放入src/main/java,我们将pom.xml放入根目录下等等,我们一步一步展示这些步骤,是为了勾勒出Maven项目的基本结构,当我们熟练使用此种方式创建Maven项目后,我们可以为了避免重复发明轮子,我们可以使用Archetype快速创建项目骨架,简单的运行Maven命令:mvn archetype:generate(实际上是在执行maven- archetype-plugin插件),在执行命令后,会让你输入groupId、artifactId、version等一些POM信息,当输入完之后,一个完整的Maven项目就快速勾勒出来了。

Maven整理笔记のMaven使用的更多相关文章

  1. Maven整理笔记のMaven仓库

    Maven坐标和依赖是任何一个构件在Maven世界中的逻辑表示方式:而构件的物理表示方式是文件,Maven通过仓库来统一管理这些文件.  Maven仓库 在Maven的世界中,任何一个依赖.插件或者项 ...

  2. Maven整理笔记のMaven使用实践

    我们通过实践来补充Maven构建的生命周期. 第一步:配置POM 接着上一篇Maven使用,我们先创建一个名为helloworld的文件夹,在helloworld目录下创建pom.xml文件,pom. ...

  3. Maven整理笔记の安装及配置

      第一部分:在Windows上安装Maven    检查JDK的安装 在安装Maven之前,首先确认你已经正确安装了JDK.Maven可以运行在JDK1.4及以上版本.先打开Windows命令,运行 ...

  4. [maven] 实战笔记 - maven 安装配置

    1.下载地址http://maven.apache.org/download.html 2.windows下安装maven(1)下载 apache-maven-3.0-bin.zip 解压到任意目录下 ...

  5. Maven整理笔记の生命周期和插件

    项目构建的生命周期,其实软件开发人员每天都在干这个事,即项目清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等,可以说几乎所有项目的构建都可以映射到这样一个生命周期上. Maven的插件 ...

  6. Maven整理笔记の初步窥探

    第一部分:引言 Maven是一款跨平台的项目管理工具,作为Apache组织的一个开源项目,主要服务于基于java平台的项目构建.依赖管理和项目信息管理. 项目构建:编译.运行单元测试.生成文档.打包和 ...

  7. MAVEN学习笔记-maven的获取和安装

      windows下maven的安装步骤:      1.下载压缩包http://maven.apache.org/download.cgi选择apache-maven-3.3.9-bin.zip下载 ...

  8. Maven 学习笔记-maven属性

    Maven有六类属性: 1)内置属性 主要有两个常用内置属性 ${basedir}:表示项目根目录,即包含pom.xml文件的目录: ${version}:表示项目版本: 2)POM属性 ${M2_H ...

  9. maven学习笔记--maven项目创建

    使用Maven命令和Eclipse的Maven插件,创建Maven项目 (1)maven命令生成项目         新建一个文件目录,dos进入该目录并执行下面命令: mvn archetype:c ...

随机推荐

  1. 根据不同分辨率载入相应CSS样式表

    index.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http:// ...

  2. JAVASCRIPT数据类型(值类型-引用类型-类型总览)

    值类型:也称为原始数据或原始值(primitive value). 这类值存储在栈(stack)中,栈是内存中一种特殊的数据结构,也称为线性表,栈按照后进先出的原则存储数据,先进入的数据被压入栈底,最 ...

  3. addClass()使用方法

    含义:为元素添加指定的样式名 具体用法分为以下两种: 1.可以一次添加一个或者多个用空格隔开的样式名 例: <script> $("ul li").addClass(& ...

  4. 服务器报警邮件发送到QQ邮箱,但是被系统拦截

    # 为啥发送到QQ邮箱呢?因为QQ邮箱可以和微信关联,第一时间收到消息 if 没有设置白名单,然后被拦截当做垃圾邮件了: 设置白名单就可以了,这样的状态特征是: 邮件在垃圾箱里面能找到 elif 还是 ...

  5. MySQL数据库篇之存储引擎

    主要内容: 一.数据引擎 二.MySQL支持的存储引擎 三.使用存储引擎 1️⃣ 什么是存储引擎? MySQL中建立的库----> 文件夹,库中建立的表----->文件. 现实生活中我们用 ...

  6. 201671010140. 2016-2017-2 《Java程序设计》java学习第十六周

    java学习第十六周-并发        本周,学习了Java中线程,并发的知识,在老师的带领下,进行了对知识的理解学习,以及对实验的运行讲解,对这一块内容掌握的还可以,在自主编程中,也能够完成.线, ...

  7. Excel VBA入门(七)注释、宏按钮及错误处理

    系统性的知识前面已经讲完,从本章开始,本系列教程涉及的将会是一些相对凌散的内容. 1. 注释 代码注释是一件利人利己的事,为了方便自己在代码需要更新修改时,依然能够快速地看懂自己完的每一行代码到底是什 ...

  8. Charles 4.2.5 破解原理.RP

    请支持正版,仅供技术交流. 写了个小工具方便在线处理,在线破解 https://github.com/8enet/Charles-Crack 2018/4/8 Charles 4.2.5 替换类名和方 ...

  9. Go 面向对象概念

    前言: 本文是学习<<go语言程序设计>> -- 清华大学出版社(王鹏 编著) 的2014年1月第一版 做的一些笔记 , 如有侵权, 请告知笔者, 将在24小时内删除, 转载请 ...

  10. Vmware下CentOs7 桥接模式下配置固定IP

    1.安装完CentOS7后 修改虚拟机网络适配器配置:改成桥接模式 2.设置Vmware的 编辑->虚拟网络编辑器 3.重启CentOs7 , 查看网络 # ip addr interface是 ...