Maven基础知识入门

Maven入门

一、什么是Maven

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

二、为什么使用Maven

Maven的功能:

简化、标准化项目建设过程
无缝连接处理,编译,分配
增加可重用性并负责建立相关任务

Maven的核心功能是合理叙述项目间的依赖关系,通俗点讲,就是通过pom.xml文件的配置获取jar包。

三、Maven目录结构

1、Maven项目目录结构
src 项目源码
-main 项目主体根目录
----bin 脚本库
––java java源代码文件
––resources 资源库,会自动复制到classes目录里
––filters 资源过滤文件
––assembly 组件的描述配置(如何打包)
––config 配置文件
––webapp web应用的目录。WEB-INF、css、js等
-test 项目测试根目录
––java 单元测试java源代码文件
––resources 测试需要用的资源库
––filters 测试资源过滤库
-site Site(一些文档)
target 输出根目录
––classes 项目主体输出目录
––test-classes 项目测试输出目录
––site 项目site输出目录

2、Maven目录结构
(1)bin: maven运行脚本,命令。
(2)boot:包含 plexus-classworlds-2.23jar( plexus- classworlds是—个类加载器框
架,相对于java默认类加载器,他提供了更丰富的语法以方便配置, maven使用该框架加载
自己的类库)。
(3)conf:配置文件 setting.xml,修改该文件就可以在机器上全局的制定 maven的行为
但一般情况下,更倾向于复制该文件到~(用户目录)/m2/目录下,然后修改该文件,在用
户范围内制定 maven的行为。
(4)lib:包含 maven运行时所需要的ava类库,包括第三方的依赖类库。
(5)LICENSE. txt:记录了 maven使用该软件的许可证。
(6) NOTICE. txt:记录了 maven包含的第三方软件
(7) README. txt:记录了 maven的简要介绍

3、maven常用命令
(1) mvn help: system:该命令打印出所有的ava系统属性和环境变量
(2) clean:清理输出目录默认 target,。
(3) mvn clean compline:编译项目主代码,默认编译至 target/ classes目录下。
(4) mvn clean test: maven测试,但实际执行的命令有: clean:clean,resource resources, compiler: compile, resources testResources,compiler testcompile, maven在执行test之前,会先自动执行项目主资源处理,主代码编译,测试资源处理,测试代码编译等工作,测试代码编译通过之后默认在 target/ test-classes目录下生成二进制文件,紧接着 surefire:test任务运行测试,并输出测试报告,显示一共运行
了多少次测试,失败成功等
(5) mvn celan package: maven打包, maven会在打包之前默认执行编译,测试等操作,打包成功之后默认输出在 target/目录中
(6) mvn clean instal:! maven安装,让其他的项目直接引用这个项目。
(7) echo% MAVEN HOME%:查看 maven安装路径
(8) mvn:检查是否安装了 maven
(9) mvn dependency;ist:查看当前项目中的已解析依赖
(10) mvn dependency tree:查看当前项目的依赖树
(11) mvn dependency: analyse:查看当前项目中使用未声明的依赖和已声明但未使用的

四、Maven生命周期

1、Maven生命周期lifecycle由各个阶段组成,每个阶段由maven插件的plugin来执行完成,挂接一个goal,goal是任务的最小单元。

2、默认构建的生命周期:校验validate——初始化initialize——编译compile——测试test——打包package——集成测试integrationTest——安装install——部署deploy

3、常用命令 mvn complie;mvn test;mvn package; mvn clean compile;(clean作用是把之前生成的代码删去)

五、坐标

任何一个Maven项目,坐标是唯一标识,Maven坐标的元素包括groupId、artifactId、version、packaging和classifier。Maven的规则是:世界上任何一个构建都可以使用Maven坐标作为唯一标识,也是通过唯一标识,找到对应的Maven构建,如下实例所示:

<groupId>org.sonatype.nexus</groupId>
<artifactId>nexus-indexer</artifactId>
<version>2.0.0</version>
<packaging>jar</packaging>

1、groupId:定义当前Maven项目隶属的实际项目
groupID的标识方式与Java包名的表示方式类似,通常与域名反向一一对应

2、artifactId:该元素定义实际项目中的一个Maven项目(模块),推荐的做法是使用实际项目名称作为artifactId的前缀。

3、version:该元素定义了Maven项目当前所处的版本。

4、packaging:该元素定义Maven项目的打包方式
首先,打包方式通常与所生成构件的文件扩展名对应,比如packaging为jar,最终的文件名为nexus-indexer-2.0.0.jar用war作为打包方式的Maven项目,最终生成的构建会有一个.war文件,不过这不是绝对的。
其次,打包方式会影响构建的生命周期,比如jar打包和war打包会使用不同的命令。
最后,当不定义packaging时,Maven会使用默认值jar。

5、classifier:该元素用来帮助定义构件输出的一些附属构件
上述五个元素,groupId、artifacId、version是必须定义的,packaging是可选的(默认为jar),而calssifer是不能直接定义的。

六、依赖

1、依赖范围
maven中的依赖范围一共有以下几种:
compile 默认,对于编译,测试,运行三个状态都有效;
test 顾名思义,只针对执行test代码;
provided 对于编译和测试时有效,但运行时无效,典型的时servlet-api,运行时这个由容器来提供;
runtime 对测试和运行时有效,但编译时无效;
system 与provided的范围一样,但system必须显示的指定依赖文件,通过来进行指定,是与本机绑定的,所以基本很少用到;
import 不会对3总产生实际的影响,只能在dependencyManagement中使用;
以表格来表示的,如下:
在这里插入图片描述
2、传递性依赖
我们的工程,所使用的大多数情况下,不会只有一成依赖关系,例如 a依赖b,我们用a->b表示,那么,a->b,b->c,则a对于b是第一依赖,b对于c是第二依赖,而a对于c是传递性依赖。在这里插入图片描述
3、依赖调节
假如有不同版本的包,他们都存在传递性依赖,如下
a->b->c->x(1.0)
a->b->x(2.0)
那么此时,根据maven依赖调节第一原则最短路径的规则,使用的x包的版本是2.0,如果当2个不同版本的包的依赖相同怎么办?这个时候就启动了第二原则,也就是按pom中声明的顺序,谁先被声明,谁优先的策略去选择包。

七、Maven仓库

1、Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。在 Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。Maven 仓库能帮助我们管理构件(主要是JAR),它就是放置所有JAR文件(WAR,ZIP,POM等等)的地方。

2、Maven 仓库有三种类型:
(1)本地(local):Maven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。
(2)中央(central):Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。
中央仓库包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。一般来说,简单的Java项目依赖的构件都可以在这里下载到。
(3)远程(remote):如果 Maven 在中央仓库中也找不到依赖的文件,它会停止构建过程并输出错误信息到控制台。为避免这种情况,Maven 提供了远程仓库的概念,它是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。

3、Maven 阿里云(Aliyun)仓库
Maven 仓库默认在国外, 国内使用难免很慢,我们可以更换为阿里云的仓库。

第一步:修改 maven 根目录下的 conf 文件夹中的 setting.xml 文件,在 mirrors 节点上,添加内容如下:

<mirrors>
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>
</mirrors>

第二步: pom.xml文件里添加:

<repositories>  
        <repository>  
            <id>alimaven</id>  
            <name>aliyun maven</name>  
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
            <releases>  
                <enabled>true</enabled>  
            </releases>  
            <snapshots>  
                <enabled>false</enabled>  
            </snapshots>  
        </repository>  
</repositories>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值