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的家目录:
- MAVEN_HOME = maven的安装(或说放置)的目录
(例如博主配置的:D:\apache-maven-3.5.0) - PATH 添加:;%MAVEN_HOME%\bin;
此时可以在cmd控制台输入:mvn -v 或 mvn -version 查看maven的版本并检验maven的安装和配置。
剖析maven
maven目录结构
1 | pom.xml:用于定义或者添加jar包的依赖 |
pom.xml文件介绍
1 | groupId:包的名称。 |
Eclipse中Maven常用命令
也许不会用到,但还是知道比较好。1
2
3
4
5
6
7
8Maven Build:
这个命令用于编译Maven工程,执行命令后会在target文件夹中的classes中生成对应的class文件。
Maven Clean:
删除target文件夹,即删除生成的package包以及class等文件。
Maven Test:
先自动进行编译,在运行所有的测试用例。
Maven install:
发布生成对应的package包。
依赖dependency
依赖的scope属性
依赖除了依赖的坐标,还有个不是必须的scope属性,它的属性值有如下:1
2
3
4
51.compile:默认值 他表示被依赖项目需要参与当前项目的编译,还有后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去
2.test:依赖项目仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包,例如:junit
3.runtime:表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过了编译而已。例如JDBC驱动,适用运行和测试阶段
4.provided:打包的时候可以不用包进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是打包阶段做了exclude操作
5.system:从参与度来说,和provided相同,不过被依赖项不会从maven仓库下载,而是从本地文件系统拿。需要添加systemPath的属性来定义路径
去除依赖
项目间传递
如果我的当前项目是project1,project1要依赖project2,project1依赖project2的配置中加上 \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
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>多依赖过滤
不多解释,相比单依赖过滤,当然就是适用于过滤比较多的依赖啦。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 | 当前版本号:1.0.0-SNAPSHOT |
语言划分:1
2
3
4
5
6
7
8
9SC:Simplified Chinese简体中文版。
CN : 简体中文版
GBK:简体中文汉字内码扩展规范版。
TC:Traditional Chinese繁体中文版。
CHT : 繁体中文版
BIG5:繁体中文大五码版。
EN : 英文版
Multilanguage : 多语言版
UTF8:Unicode Transformation Format 8 bit,对现有的中文系统不是好的解决方案。