mvn 优先_初识Maven及入门

最近用到了Maven,就开始看看文档,网上找找资料,看了些视频。现在整理一下,仅供参考。

0x00    关于Maven

Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.

这是官网上的一段关于Maven的介绍。经过几天的折腾,我觉得Maven是一个开源的项目构建、管理工具,能够让团队更加高效的合作开发项目。其核心是pom文件,拥有一系列强大的插件和一个中央仓库。

古人说的好:纸上得来终觉浅,绝知此事要躬行。至于Maven是干什么用的,怎么用,我们下载一个,安装好,用用就知道了。或许你能够对Maven理解的更进一步。

0x01    安装Maven

接下来说一下,在windows环境下,如何安装Maven。选用的Maven版本是apache-maven-3.3.9。

-安装JDK

-设置Java环境变量

-设置Maven环境变量

*安装JDK

这个就没什么好说了。=_=

*设置Java环境变量

Control Panel -> System and Security -> System -> Advanced system settings -> Enviroment Variables

系统变量下    { 注:【】只是为了强调说明 }

新建CLASSPATH

值为【.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;】

新建JAVA_HOME

值为【C:\Program Files\Java\jdk1.8.0_91】{备注:JDK的安装目录}

PATH后添加【%JAVA_HOME%\bin;】

*设置Maven环境变量

下载Maven并解压

系统变量下    { 注:【】只是为了强调说明 }

新建MAVEN_HOME -> 值为【D:\Program Files\apache-maven-3.3.9】{备注:Maven所在目录}

PATH后添加【%MAVEN_HOME%\bin;】

在命令行窗口中,使用mvn -v来查看一下maven的版本信息,如下图所示:

mvn -v

说明maven已经安装配置好了。

接下来说一下Maven的核心:pom文件。

0x02    pom.xml

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

在Eclipse中新建一个Maven Project,生成的pom.xml文件如下:

pom.xml

其中groupId,artifactId,version是最重要的,这三个元素定义了一个项目基本的坐标。在Maven的世界,任何的jar,pom或者war都是以基于这些基本的坐标进行区分的。

*groupId  -- 定义了项目属于哪个组,这个组往往和项目所在的组织或公司存在关联。比如说,你在github上建立了一个名为myapp的项目,那么groupId就应该是com.github.myapp,如果你的公司是athrob,有一个项目为cloud,那么groupId就应该是com.athrob.cloud。

*artifactId  -- 定义了当前maven项目在组中唯一的ID。一般使用"项目名-模块名"来命名。

*version  -- 指定了当前maven项目的版本。SNAPSHOT意为快照,说明该项目还处于开发中,是不稳定的版本。随着项目的发展,version会不断更新,如,升级成1.0,2.0-SNAPSHOT,2.0等。{ 注:一般第一个0表示大版本号,第二个0表示分支版本号,第三个0表示小版本号,例:0.0.1,snapshot,--快照;alpha,--内部测试;beta,--公测;release,--稳定版GA(General Availability)--正式发布的版本 }

其他标签:

*name  --项目描述名,声明了一个对于用户更为友好的项目名称。虽然这不是必须的,但是推荐为每个pom声明name,以方便信息交流。

*package  --默认是jar

*description  --项目描述

*dependency,exclusions,build,plugin,parent,module等见下图所示:

dependency,exclusions,build,plugin,parent,module

关于依赖,后面我们会具体说一下依赖,依赖的冲突。以及maven的聚合和继承。

0x03  Maven生命周期(clean,default,site)

clean--清理项目

default--构件项目

site--生成项目站点

*clean: 三个阶段

pre-clean--执行清理前的工作

clean--清理上一次构建生成的所有文件

post-clean--执行清理后的文件

*default: (最核心)

主要有这几个阶段:compile,test,package,install

*site:

pre-site--在生成项目站点前要完成的工作

site--生成项目的站点文档

post-site--在生成项目站点后要完成的工作

site-deploy--发布生成的站点到服务器上

0x04  Maven仓库

有本地仓库,远程仓库,镜像仓库。

接下来说一下如何修改他们。

本地仓库默认是在~/.m2目录下。{ ~ 表示用户所在的家目录,例:C:\Users\admin\.m2 }

修改maven的conf目录下的settings.xml文件,使用localRepository标签,添加本地仓库的目录,如下图:

local_repo

这样,我们就把Maven的本地仓库设置为:D:/maven_repo

然后复制settings.xml文件到我们设置的本地仓库目录下。

远程仓库可以理解为Maven的中央仓库:https://repo.maven.apache.org/maven2

通过打开lib目录下的maven-model-builder-3.3.9.jar包,依次进入org\apache\maven\model,查看pom-4.0.0.xml文件,就可以看到中央仓库的url了。

镜像仓库:

依然是刚才提到的settings.xml,修改其中mirrors,mirror标签里的内容,就可以修改maven的镜像仓库,这里我修改为OSChina的,如下图:

OSChina mirror

0x05  关于Maven项目

*Maven项目主代码和测试代码:

默认情况下,项目主代码位于src/main/java目录,测试代码位于src/test/java目录。

*自动创建符合maven规范目录的两种方式:

mvn archetype:generate     [注:按照提示进行选择]

mvn archetype:generate -DgroupId=组织名、公司网址的反写 + 项目名 -DartifactId=项目名-模块名 -Dversion=版本 -Dpackage=代码所在的包名

*常用的maven命令:

mvn -v   --  查看maven版本

mvn compile   --  编译

mvn test   --  测试

mvn package   --  打包

mvn clean   --  删除target

mvn install   --  安装jar包到本地仓库中

也可以组合起来用,如:mvn clean package

好,接下来,说一说maven中另外一个比较重要的概念:依赖。

0x06  依赖

前面也提到过,在pom.xml文件中使用dependencies和dependency标签,来声明依赖。

首先说一下依赖的范围:(使用scope标签声明依赖的范围)

compile--默认的范围,编译测试运行都有效

provided--在编译和测试时有效

runtime--在测试和运行时有效

test--只在测试时有效

system--与本机系统相关联,移植性差

import--导入的范围,它只使用在dependencyManagement中,表示从其他的pom中导入dependency的配置

接下来用具体的例子来说明依赖,依赖的传递以及排除依赖传递,如下图所示:

A,B,C分别为三个maven项目。

B依赖A

C也依赖了A

使用exclusions,exclusion标签来声明排除依赖传递

C依赖B,不依赖A

接下来,说一下关于依赖的冲突。(即声明了相同的构件,不同的版本)

两条原则:

1.短路优先

A -> B -> C -> X(jar)

A -> D -> X(jar)

会优先解析路径短的版本

2.先声明,先优先

如果路径长度相同,则谁先声明,先解析谁

依然以图示例,这样会更好理解一些,如下图所示:

A,B,C为三个Maven项目

1. 短路优先

A-commons-io-2.4

B-commons-io-2.0

C-commons-io-2.0

2. 先声明,先优先

C-A-commons-io-2.4

C-B-commmons-io-2.0

0x07  聚合和继承

*聚合

我对聚合的理解就是一个maven项目能够直接对其他所有模块项目进行管理和构建。

如下图所示:

A,B,C为三个maven模块项目,新建一个all项目,通过modules,module标签声明聚合。

build-all-juhe

通过对all这个项目的maven build...就实现对其他三个项目的构建。查看控制台信息,如下:

A-B-C-build-success

这样就不用对每个模块逐个进行构建。可以看到A,B,C均构建成功。

build-A-jar

build-B-jar

build-C-jar

*继承

跟java中继承的概念很相似,还是以图示例,见下图:

可以看到,A没有依赖,parent依赖junit-3.8.1.jar。

A-no-yilai

在A的pom.xml中使用parent标签表现来声明继承parent,如下图:

A-jicheng-parent

可以看到,此时A就继承了parent对junit-3.8.1.jar的依赖。

0x08  使用Eclipse新建一个Maven Project之webapp

首先要安装m2eclipse插件:

在Eclipse IDE中,Help -> Install New Software... -> Add

Name: m2e

Location: http://m2eclipse.sonatype.org/sites/m2e注:不要使用IDE内嵌的MAVEN插件

Windows -> Perferences -> Maven -> Installations  【取消使用IDE内嵌的Maven插件,选择Add添加Maven的安装目录】

然后更改Maven的User Settings。这里选择本地仓库的settings.xml文件。

maven-user-settings

然后我们开始新建一个Maven Project

new-other

new-maven-project

use-default-workspace

Select an Archetype这一步,选择webapp

select-an-archetype

填写groupId,artifactId,version,package等信息。

specify-archetype-param

等个一两分钟,项目就创建好了,但是会报一个jsp error的错误。这是因为,缺少了一个类。

jsp-error

解决办法如下图,添加Java Servlet API的依赖就好了:

jsp-error-solution

此时,就OK了。剩下的可以自由发挥了。

0x09  其他

上面我们创建好的Maven Project,发现没有src/main/java和src/test/java文件夹,只有一个src/main/resource文件夹。

我们更改一下项目的JRE System Library就好了。

add-JRE-System-Library

workspace default JRE

add JRE System Library

remove JRE1.5

main test folder appear

可以看到,此时就有src/main/java和src/test/java两个文件夹了。

使用jetty插件

jetty-plugin

run as maven build...

jetty-run

started-jetty-server

访问http://localhost:8080

localhost-8080

使用tomcat插件

tomcat-plugin

上面这里部署了在package阶段运行。

tomcat-clean-package

tomcat-run

访问http://localhost:8080/webdemo

localhost-8080-webdemo

完!

不足之处,请批评指正。

如有问题,请私信联系。

谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值