Maven的安装配置及使用 。以及基本原理

Maven的使用及安装 及基本信息
maven是一个软件(特别是Java软件)项目管理及自动构建工具,由Apache软件基金会所提供。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。
一 maven的下载安装

  1. Maven工具下载
    下载地址:http://maven.apache.org/download.cgi
    在这里插入图片描述

1.2 将Maven压缩包解压到不含有中文路径下
在这里插入图片描述

  1. 3配置Maven环境变量(path中加入maven安装目录下的bin目录路径)
    在这里插入图片描述
    1.4 4. 检查JDK版本和检查Maven是否正常(cmd中执行mvn -v)
    在这里插入图片描述
    在这里插入图片描述
    1.5 修改配置文件,apache-maven-xxx\conf目录下的settings文件
    (可选,默认在C盘的用户目录下)修改localRepository 为
    在这里插入图片描述
    配置阿里数据源
.配置阿里数据源
<!-- 阿里源 -->
<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>*</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
 </mirror>



二 maven的简单使用
cmd下输入以下语句 创建一个demo项目
mvn archetype:generate -DarchetypeCatalog=internal -DgroupId=com.chinasofti.build -DartifactId=demo
例如
在这里插入图片描述
会开始下载相应架包,耐心等待后有如下显示,出现7等数字时 直接回车 同理后面出现停顿依旧回车
在这里插入图片描述
若出现以下情况 说明项目demo已存在,则新建文件夹下创建demo文件夹 在地址栏输入cmd 再次执行上述语句,例如
在这里插入图片描述在这里插入图片描述
回车----->在demo文件夹下执行cmd命令 (红线处输入cmd):
mvn clean compile exec:java -Dexec.mainClass=“com.chinasofti.build.App”
在这里插入图片描述
则成功运行demo项目
如果报如下错误
在这里插入图片描述
解决办法一 在settings.xml文件中指定jdk版本
既可以修改全局的settings.xml文件(C:\Program Files\apache-maven-3.6.0\conf\settings.xml)

也可以修改用户的settings.xml文件(~.m2\settings.xml)

在settings.xml文件中找到标签,在里面新建一个字标签 在里面指定jdk版本

我的jdk版本是10.0.2 所以写的是10 根据你自己的jdk版本写 1.7/1.8~~


<profile>  
     <id>jdk-10</id>  
     <activation>  
         <activeByDefault>true</activeByDefault>  
         <jdk>10</jdk>  
     </activation>
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <maven.compiler.source>10</maven.compiler.source>  
         <maven.compiler.target>10</maven.compiler.target>   
     </properties>   
</profile> 

解决办法二 在项目的pom.xml文件中指定jdk版本
我的jdk版本是10.0.2 所以写的是10 根据你自己的jdk版本写 1.7/1.8~~~~
元素时根元素的子元素

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>10</maven.compiler.source>
    <maven.compiler.target>10</maven.compiler.target>
</properties>

在这里插入图片描述
三 基本概念-生命周期
(1)maven对构建(build)的过程进行了抽象和定义,这个过程被称为构建的生命周期(lifecycle)。
(2)生命周期(lifecycle)由多个阶段(phase)组成,每个阶段(phase)会挂接一到多个goal。
(3)goal是maven里定义任务的最小单元,相当于ant里的target。
(4)可以理解maven为一个插件的容器,每个插件绑定到某个goal执行
在这里插入图片描述
3.2构建的生命周期

Maven有用三套相互独立的生命周期,他们分别是clean、default、site。

clean生命周期的目的是清理项目
default生命周期的目的是构建项目

site生命周期的目的是建立项目站点

每个生命周期都包含一些阶段(phase),这些阶段是有序执行的,并且后面的阶段依赖于前面的阶段,用户和maven最直接的交互方式就是调用这些生命周期阶段。


clean生命周期

clean生命周期包含三个阶段:
1)pre-clean:执行一些清理前需要完成的工作
2)clean:清理上一次构建生成的文件
3)post-clean:执行一些清理后需要完成的工作
我们一般使用clean命令即可

          default生命周期  

default生命周期定义了真正构建时需要执行的步骤,它是所有生命周期中最核心的部分,其中包括如下阶段:
1)validate
2)initialize
3)generate-sources
4)process-sources处理项目主资源文件。一般来说,是对src/main/resources目录的内容进行变量替换等工作后,赋值到项目输出的主classpath目录中。
5)generate-resources
6)process-resources
7)compile编译项目的主源码。一般来说,是编译src/main/Java目录下的java文件至项目输出的主class目录中
8)process-classes
9)generate-test-sources

10)process-test-sources 处理项目测试资源文件。一般来说,是对src/test/resources目录的内容进行变量替换等工作后,赋值到项目输出的测试classpath目录中。
11)generate-test-resources
12)process-test-resources
13)test-compile编译项目的测试代码。一般来说,是编译src/test/java目录下的java文件至项目输出的测试classpath目录中
14)process-test-classes
15)test使用单元测试框架运行项目,测试代码不会被打包或者部署
16)prepare-package
17)package接受编译好的代码,打包成可发布的格式,如JAR
18)pre_integration-test
19)integration-test
20)post-integration-test
21)verify

22)Install 将包安装到maven本地仓库,供本地其它maven项目使用
23)deploy将最终的包复制到远处仓库,供其它开发人员和maven项目使用
注:未说明的大家可以参考官网的解释
我们一般使用的几个命令:compile、test、package、install、deploy

site生命周期

site生命周期的目的是建立和发布项目站点,maven能够基于pom所包含的信息,自动生成一个侯浩的站点,方便团队交流和发布项目信息。该生命周期包含如下阶段:
1)pre-site执行一些在生成项目站点之前需要完成的工作
2)site生成项目站点文档
3)post-site执行一些在生成项目站点后需要完成的工作
4)site-deploy将生成的项目站点发布到服务器上
命令行与生命周期

从命令行执行maven任务的最主要方式就是调用maven的生命周期阶段。需要注意的是,各个生命周期是相互独立的,而一个生命周期的二阶段是有前后依赖关系的,也就是说后一个生命的执行,那么前面的生命周期必须也要执行。
1)clean:该命令调用clean生命周期的clean阶段。实际执行的生命周期是pre-clean和clean阶段
2)test:该命令调用default生命周期的test阶段。实际执行的阶段为validate、initialize等,知道test的所有阶段。这也解释了为什么在测试的时候,项目的代码能够自动的得以编译。
3)clean install:该命令调用clean生命周期的clean阶段和default生命周期的install阶段。实际执行的阶段为clean生命周期的pre-clean、clean阶段,以及default生命周期的从validate至install的所有阶段。该命令结合了两个生命周期,在执行真正的项目构建之前清理项目时一个很好的建议。
4)clean deploy site-deploy:该命令调用clean生命周期的clean阶段、default生命周期的deploy阶段,已经site生命周期的site-deploy阶段

3.3基本概念-坐标 : 依赖范围
compile:编译时依赖在所有阶段都可获得,这是默认值。
provided: 提供的依赖范围用来编译应用程序,但无需部署。若你用到jdk或者应用服务器提供的JAR,则使用此范围,servlet APIs就属于这个依赖范围。测试时,此依赖范围也加入到classpath。
runtime:运行依赖范围在编译阶段是不需要的,只有在运行时需要,比如JDBC驱动程序。
test:测试范围依赖,仅在编译和运行单元测试时需要(比如Junit)。
system 本地依赖,不建议使用。(nexus)

3.4 maven的坐标
Maven的一个核心的作用就是管理项目的依赖,引入我们所需的各种jar包等。为了能自动化的解析任何一个Java构件,Maven必须将这些Jar包或者其他资源进行唯一标识,这是管理项目的依赖的基础,也就是我们要说的坐标。包括我们自己开发的项目,也是要通过坐标进行唯一标识的,这样才能才其它项目中进行依赖引用。

1.何为Maven坐标

关于坐标(Coordinate),大家最熟悉的应该就是数学中的坐标了吧,我印象不是特别深刻,说的数学专业一点叫作平面几何。在一个平面坐标系中,有x轴和y轴,x轴就是横线,y轴就是竖线,坐标(x,y)表示这个点距离x轴为y,距离y轴为x的一点,任何一个坐标都能唯一标识该平面中的一点。
在实际的生活中,我们可以将地址看成是一种坐标。不同的省,不同的市,不同的区,不同的街道等一系列信息标识了每一个不同的地址。在深圳经常吃外卖的人应该是有体会的,送外卖的小哥都会根据你填写的地址将外卖送给你,而你填的地址就标识了唯一的一个地址。

坐标就好比每一个Java构件的身份证一样。Maven的世界是拥有非常多的Java构件的,可能是jar、可能是war、也可能是其他的一些东西。假如Maven中没有坐标的概念,我们是无法来区分这些构件的,所以我们要唯一标识每一个构件。不然就和传统的手工方式一样,你需要spring就去spring下载spring的包,需要mysql又去mysql下载mysql的包,没有统一的规范又怎么能够自动化的去依赖这些构件。

Maven便给我们制定了一套规则那就是使用坐标进行唯一标识。Maven的坐标元素包括groupId、artifactId、version、packaging、classfier。只要我们提供正确的坐标元素,Maven就能找到对应的构件,首先去你的本地仓库查找,没有的话再去远程仓库下载。如果没有配置远程仓库,会默认从中央仓库地址(http://repo1.maven.org/maven2)下载构件,该中央仓库包含了世界上大部分流行的开源项目构件,但不一定所有构件都有,我在以前的开发中就遇到过找不到oracle数据库jar包的问题,不知道现在是否依然如此。

在我们自己开发项目的时候,也是要给我们的项目定义坐标的,这是强制性要求,只有这样,其他项目才能引用该项目的构件。

2.坐标详细说明

Maven坐标是通过groupId、artifactId、version、packaging、classfier这些元素来定义的,我们来看看示例:

我们在平时的开发中一般只需要使用必要的几个元素就好了,不必要的一些元素往往是用不着的,我们来看看每个元素所代表的含义,前面也是有简单的提到过的。

groupId :定义当前Maven项目隶属的实际项目。首先,Maven项目和实际项目不一定是一对一的关系。比如SpringFrameWork这一实际项目,其对应的Maven项目会有很多,如spring-core,spring-context等。这是由于Maven中模块的概念,因此,一个实际项目往往会被划分成很多模块。其次,groupId不应该对应项目隶属的组织或公司。原因很简单,一个组织下会有很多实际项目,如果groupId只定义到组织级别,而后面我们会看到,artifactId只能定义Maven项目(模块),那么实际项目这个层次将难以定义。最后,groupId的表示方式与Java包名的表达方式类似,通常与域名反向一一对应。上例中,groupId为junit,是不是感觉很特殊,这样也是可以的,因为全世界就这么个junit,它也没有很多分支。

artifactId : 该元素定义当前实际项目中的一个Maven项目(模块),推荐的做法是使用实际项目名称作为artifactId的前缀。比如上例中的junit,junit就是实际的项目名称,方便而且直观。在默认情况下,maven生成的构件,会以artifactId作为文件头,如junit-3.8.1.jar,使用实际项目名称作为前缀,就能方便的从本地仓库找到某个项目的构件。

version : 该元素定义了使用构件的版本,如上例中junit的版本是3.8.1,你也可以改为4.0表示使用4.0版本的junit。

packaging :定义Maven项目打包的方式,使用构件的什么包。首先,打包方式通常与所生成构件的文件扩展名对应,如上例中没有packaging,则默认为jar包,最终的文件名为junit-3.8.1.jar。也可以打包成war等。

classifier: 该元素用来帮助定义构建输出的一些附件。附属构件与主构件对应,如上例中的主构件为junit-3.8.1.jar,该项目可能还会通过一些插件生成如junit-3.8.1-javadoc.jar,junit-3.8.1-sources.jar, 这样附属构件也就拥有了自己唯一的坐标。

上述5个元素中,groupId、artifactId、version是必须定义的,packaging是可选的(默认为jar),而classfier是不能直接定义的,需要结合插件使用。

大家可以发现一个构件的名称就是由这几个元素的值所组成的,junit-3.8.1.jar,自己去比对一下,不仅如此,Maven仓库的布局也是基于Maven坐标的,大家可以看看本地仓库的布局是否如此。

理解了Maven坐标以后,大家就能够开始去学习Maven的依赖管理了。

未完待续 有机会补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值