Fork me on GitHub

Maven初印象

Maven

项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。

博主跟大家一样,一个普通的java战场的小兵,从对maven丝毫不熟悉,至少到了会用,从怕maven到了喜欢maven,无maven不项目,个人观点。相信各位读者在学习了maven,熟悉了maven以后,一定会跟博主一样爱上maven~


预备…

首先小叙下maven的安装配置。

下载

进入maven的官网http://maven.apache.org/download.cgi 下载maven

上面两个是编译好的二进制包,而后两个是源码包,这里选择windows上用的zip包。

配置

下载到本地后,解压缩到系统盘以外的盘,修改maven的conf文件夹下的settings.xml文件:

这里将maven源换成国内的阿里maven源,在下载速度上会大大加快。

1
2
3
4
5
6
7
8
9
10
 <!-- maven默认的本地仓库 -->
<localRepository>F:\mavencangku</localRepository>

<!-- 配置maven的镜像源 -->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>;
<mirrorOf>central</mirrorOf>
</mirror>

同时还需要将该settings.xml文件拷贝一份到C:\Users\Administrator.m2
这个目录是maven默认的配置文件的目录,当你在其他软件中配置maven时默认指向的便是这个目录,所以复制一份放在这个文件夹会有一定的方便。

配置环境变量

和以往的JAVA_HOME一样,配置maven的家目录:

  1. MAVEN_HOME = maven的安装(或说放置)的目录
    (例如博主配置的:D:\apache-maven-3.5.0)
  2. PATH 添加:;%MAVEN_HOME%\bin;

此时可以在cmd控制台输入:mvn -v 或 mvn -version 查看maven的版本并检验maven的安装和配置。


剖析maven

maven目录结构

1
2
3
4
pom.xml:用于定义或者添加jar包的依赖
src-main:用于存放java源文件
src-test:用于存放测试用例
src-sources:用于存放资源文件

pom.xml文件介绍

1
2
3
4
5
groupId:包的名称。
artifactId:所述的项目名称,由于有的项目并不是一个jar包构成的,而是由很多的jar包组成的。因此这个groupId就是整个项目的名称。
version:版本号。
packaging:包的类型,一般都是jar,也可以是war之类的。如果不填,默认就是jar。
name和url:一个是名称,一个是maven的地址。

Eclipse中Maven常用命令

也许不会用到,但还是知道比较好。

1
2
3
4
5
6
7
8
Maven Build:
这个命令用于编译Maven工程,执行命令后会在target文件夹中的classes中生成对应的class文件。
Maven Clean:
删除target文件夹,即删除生成的package包以及class等文件。
Maven Test:
先自动进行编译,在运行所有的测试用例。
Maven install:
发布生成对应的package包。

依赖dependency

依赖的scope属性

依赖除了依赖的坐标,还有个不是必须的scope属性,它的属性值有如下:

1
2
3
4
5
1.compile:默认值 他表示被依赖项目需要参与当前项目的编译,还有后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去
2.test:依赖项目仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包,例如:junit
3.runtime:表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过了编译而已。例如JDBC驱动,适用运行和测试阶段
4.provided:打包的时候可以不用包进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是打包阶段做了exclude操作
5.system:从参与度来说,和provided相同,不过被依赖项不会从maven仓库下载,而是从本地文件系统拿。需要添加systemPath的属性来定义路径

去除依赖

项目间传递

如果我的当前项目是project1,project1要依赖project2,project1依赖project2的配置中加上 \true\,表示依赖可选:

1
2
3
4
5
6
7
<dependency>
<groupId>com.projecct</groupId>
<artifactId>project2</artifactId>
<version>1.0</version>
<scope>compile</scope>
<optional>true</optional>
</dependency>

那么以后所有声明依赖project1的项目如果也依赖project2,就必须写手动声明。比如project3依赖project1和project2,如果project3只声明了对project1的依赖,那么project2不会自动加入依赖,需要重新声明对project2的依赖。
这种方式排除不了我项目中对第三方jar包所依赖的其他依赖,因为我不可能去修改第三方jar包的pom文件,所以只适合在项目组内部使用。

依赖过滤

  1. 单依赖过滤
    同依赖过滤直接处理:可以过滤一个或者多个,如果过滤多个要写多个\,此时就不太适用。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase</artifactId>
    <version>0.94.17</version>
    <exclusions>
    <exclusion>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    </exclusion>
    </exclusions>
    </dependency>
  2. 多依赖过滤
    不多解释,相比单依赖过滤,当然就是适用于过滤比较多的依赖啦。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase</artifactId>
    <version>0.94.17</version>
    <exclusions>
    <exclusion>
    <groupId>*</groupId>
    <artifactId>*</artifactId>
    </exclusion>
    </exclusions>
    </dependency>

下面再附上博主整理的项目版本号和语言划分说明:

版本号说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
当前版本号:1.0.0-SNAPSHOT
本项目采用通用的三级版本号,版本号格式是[主版本号].[副版本号].[修复版本号]-[稳定状态],如:1.0.0-SNAPSHOT。(主、副、增量)
1. [主版本号] 是从1开始的整数,表示重大的项目结构和概念调整,一般不会轻易修改该版本号,不同的主版本号不承诺能够兼容。
2. [副版本号]是从0开始的整数,表示项目的功能特性增加或者BUG修复,同一个[主版本号]下的不同副版本是能够向下兼容的。
3. [修复版本号]的只是从0开始的整数,一般只是小的BUG修复,细微功能调整。
4. [稳定状态]的可选值有:SNAPSHOT、RC[序号]、RELEASE。SNAPSHOT表示开发快照版本,该版本未经过严格测试,可能呢不稳定,不宜用于生产环境;RC[序号]表示可选非正式发布版本,比较稳定,但是非正式版本,可能存在问题,可能有多个RC版本,RC序号会有多个;RELEASE表示正式发布版本,经过了严格测试,可以用于生产环境,请尽量用该版本作为生产使用
Alpha:是内部测试版,一般不向外部发布,会有很多Bug.一般只有测试人员使用。
Beta:也是测试版,这个阶段的版本会一直加入新的功能。在Alpha版之后推出。
RC:(Release Candidate) 顾名思义么 ! 用在软件上就是候选版本。系统平台上就是发行候选版本。RC版不会再加入新的功能了,主要着重于除错。
GA:General Availability,正式发布的版本,在国外都是用GA来说明release版本的。
RTM:(Release to Manufacture)是给工厂大量压片的版本,内容跟正式版是一样的,不过RTM版也有出限制、评估版的。但是和正式版本的主要程序代码都是一样的。
OEM:是给计算机厂商随着计算机贩卖的,也就是随机版。只能随机器出货,不能零售。只能全新安装,不能从旧有操作系统升级。包装不像零售版精美,通常只有一面CD和说明书(授权书)。
RVL:号称是正式版,其实RVL根本不是版本的名称。它是中文版/英文版文档破解出来的。
EVAL:而流通在网络上的EVAL版,与“评估版”类似,功能上和零售版没有区别。
RTL:Retail(零售版)是真正的正式版,正式上架零售版。在安装盘的i386文件夹里有一个eula.txt,最后有一行EULAID,就是你的 版本。比如简体中文正式版是EULAID:WX.4_PRO_RTL_CN,繁体中文正式版是WX.4_PRO_RTL_TW。其中:如果是WX.开头是 正式版,WB.开头是测试版。_PRE,代表家庭版;_PRO,代表专业版。

α、β、λ常用来表示软件测试过 程中的三个阶段,α是第一阶段,一般只供内部测试使用;β是第二个阶段,已经消除了软件中大部分的不完善之处,但仍有可能还存在缺陷和漏洞,一般只提供给 特定的用户群来测试使用;λ是第三个阶段,此时产品已经相当成熟,只需在个别地方再做进一步的优化处理即可上市发行。

Alpha -- 内部测试版 
Beta -- 公开测试版
Cardware -- 属共享软件的一种,只要给作者回复一封电邮或明信片即可。目前这种形式已不多见。
CHT -- 繁体中文版
CN/SPC -- 简体中文版
EN -- 英文版
Corporation & Enterprise -- 企业版
Deluxe -- 豪华版
Demo -- 演示版
Dev -- 开发专用版,程序员版本。
Enhance -- 增强版&;加强版 (属于正式版)
Express&Special --特别版
Final -- 最终版
Free -- 免费版
Full version -- 完全版 (属于正式版)
Green -- 绿色版&;破解版
Mini -- 迷你版&;精简版,只有最基本的功能,占用资源较少
Multi-language -- 多语言版
Plus -- 属增强版,不过大部分是在程序界面及功能上增强。
Preview --预览版
Professional -- 专业版
Regged/Registered -- 已注册版
Release -- 发行版
Retail/RTM -- 零售版
Shareware -- 共享版
Stable -- 稳定版
Standard -- 标准版
Ultimate -- 旗舰版
Upgrade -- 升级版

语言划分:

1
2
3
4
5
6
7
8
9
SC:Simplified Chinese简体中文版。 
CN : 简体中文版
GBK:简体中文汉字内码扩展规范版。
TC:Traditional Chinese繁体中文版。
CHT : 繁体中文版
BIG5:繁体中文大五码版。
EN : 英文版
Multilanguage : 多语言版
UTF8:Unicode Transformation Format 8 bit,对现有的中文系统不是好的解决方案。

-------------本文结束感谢您的阅读-------------
如果您对博主的原创满意,欢迎您继续支持下博主~