关于自己对Maven的理解

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.
是一个软件(特别是Java软件)项目管理及自动构建工具,由Apache软件基金会所提供。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。

构建工具
依赖管理工具
项目信息聚合工具

下载与安装

官网下载安装(http://maven.apache.org/download.cgi),选择bin.zip的版本
解压到安装目录
path中加入maven安装目录下的bin目录路径
测试安装成功:cmd中执行mvn -v
修改配置文件,apache-maven-xxx\conf目录下的settings文件
(可选,默认在C盘的用户目录下)修改localRepository 为

<localRepository>d:/mvn/repo</localRepository>

(极速之选,不选龟速)修改mirrors,在标签下加入以下配置,启动阿里云的镜像

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

Maven创建与简单运行

mvn archetype:generate -DarchetypeCatalog=internal -DgroupId=com.chinasofti.build -DartifactId=demo //创建
mvn clean compile exec:java -Dexec.mainClass=“com.chinasofti.build.App”//运行

基本概念-生命周期

概念

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

图形

在这里插入图片描述在这里插入图片描述

名词解释

在这里插入图片描述

基本概念-坐标

关于坐标的格式

<dependency>
	<groupId>net.sf.json-lib</groupId>
	<artifactId>json-lib</artifactId>
	<version>2.4</version>
	<type>jar</type>
	<classifier>jdk15</classifier>
</dependency>

groupId :定义当前Maven项目隶属的实际项目。
artifactId : 该元素定义当前实际项目中的一个Maven项目(模块),推荐的做法是使用实际项目名称作为artifactId的前缀。
version : 该元素定义了使用构件的版本。
type:该项目打包的类型
classifier: 该元素用来帮助定义构建输出的一些附件。

关于坐标的目的

通过坐标来定位jar包的位置并去下载它

关于坐标的依赖

依赖范围

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

依赖传递原则

Only compile and runtime scopes are transitive
A->B->C
简单传递依赖:A->C
A->B-C(0.1)
A->C(0.2)
最短路径优先原则: A->C(0.2)
A->B->C(0.1)
A->E->C(0.2)
第一声明优先原则:最终依赖C(0.1)

依赖归类

<properties>
    <spring.version>2.5</spring.version>
</properties>
<dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>
</dependencies>

依赖排除

<dependency>
       <groupId>org.hibernate</groupId>
       <artifactId>hibernate-validator</artifactId>
       <version>4.3.1.Final</version>
       <exclusions>
            <exclusion>
                <artifactId>slf4j-api</artifactId>
                <groupId>org.slf4j</groupId>
            </exclusion>
       </exclusions>
</dependency>

继承

父maven项目中通过dependenciesManagement中定义公共依赖项
子maven项目中通过dependencies中定义公共依赖项
插件/properties都可以继承

仓库管理

local -> private-> central
local:localRepository in settings.xml
private:mirrors in settings.xml
central: Public Repositories in nexus
在需要的jar包,Maven先从本地仓库找,如果没有再在私有仓库找,如果还没有就在中央集成仓库找并下载它。

自我总结

通过这次Maven工程的基础学习,我感触很深,以前只见过同学用过,自己知道有这个东西但并没有去实际使用过,在以往的编写代码用SSM框架时导入很多包,经常是有需要某个包就去网上直接下载一个放进去,以至于版本有些不匹配,在单个使用的时候没什么大问题,当模块功能组合到一起时就容易出现问题了,报错了还半天找不出来,表面看上去似乎没什么问题,为什么会报错,很纠结,在老师的讲解下,我明白了可能是他们的依赖出了问题,当模块依赖一个jar包时,这个jar可能依赖另外一个jar包,而同时这个模块直接依赖于那个二次依赖的jar包,此时它们的版本可能不同,以至于两者或许发生某种冲突,导致表面看起来没什么问题的模块却报错,在老师讲解的Maven工程中它能够自己以某种算法梳理这种关系,而且Maven工程的jar包都是添加依赖直接给项目下载并放入库中,方便了编码人员。在项目构建方面,Maven工程也提供了良好的结构,层次分明,比如src/main/java就是存放源码的,src/main/test就是存放测试代码的,src/target是用于存放编译打包后的文件,分的十分清楚。还有Maven的生命周期,刚开始放出图的时候,看到这一圈圈感觉有点懵,加上自己英语水平不好,看的很吃力,但是在老师的讲解下加上下面的解释图片,我对Maven的生命周期有了大概的了解,但是了解的很肤浅,因为从来没用过这个东西,我感觉只有在实践中去运用它,不断的了解它,才能更好的应用,相信在未来的应用中可能会出很多问题,但是出问题不可怕,只有出了问题你才能更好的了解它使用它。相信它一定会成为我未来很并经常使用的工具之一。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值