一、Maven能做什么

1、假设我们有10个项目,都需要引入spring core模块,那么需要十份重复的Spring Core.jar和commons-logging.jar

使用Maven:maven使用本地仓库存储的jar,所有项目都会公用仓库中的同一分jar

2、Spring Core.jar必须同时引入版本兼容的commons-log.jar,否则会报错

使用Maven:maven不需要关心这些问题,会自动引入Spring core.jar所需的兼容版本jar

3、如果一个项目里面有个100个jar,不知道那些jar是彼此关联的,那些是互相排斥的,当需要升级版本时,增加或删除一些jar,很容易出各种问题

使用Maven:maven升级jar,只需要把版本3.x改成4.x,他会自动解决那些问题

概括的说:Maven是一个项目管理和综合工具。Maven简化和标准化项目建设过程。处理编译,分配,文档,团队协作和其他任务的无缝连接。Maven增加可重复性并负责建立相关的业务。

二、Maven的安装和设置

1、安装之前,首先确定你已经安装了JDK

2、下载地址:http://maven.apache.org/download.cgi

3、将安装文件解压到你指定的目录中

4、配置环境变量,变量名M2_HOME,变量值为Maven的安装目录,修改path值,在变量值后面加上bin,例如:%M2_HOME%/bin

5、测试maven环境,执行命令:mvn -v

三、从Maven模板创建一个项目

1、整个项目的项目目录结构会自动创建

2、所有的源代码放在文件夹/src/main/java/,所有的单元测试代码放入:/src/test/java/

3、附加的一个标准的pom.xml被生成,这个Pom文件类似于Ant build.xml文件,它描述了整个项目的信息,一切“从目录结构”,项目的插件,项目依赖,如何构建这个项目等。

4、Maven各个目录的解释说明

5、pom的基本信息

6、pom的依赖关系

7、pom详解

a、添加插件

b、去除依赖

c、继承

d、聚合(通过一个大的项目来整合各个小的模块)

e、指定在Build时需要的资源文件(resource)

四、Maven的生命周期

1、clear:移除上一次构建生成的文件

2、compile:编辑项目的源代码

3、test:使用单元测试框架进行测试,测试代码不会被打包或者部署

4、package:接受编译好的代码,打包成可发布的格式

5、install:将包安装到maven本地仓库,供本地其他maven项目使用

6、deploy:将最终的包发布到远程仓库,供其他开发人员和maven项目使用。

7、site:生成项目的站点文档

五、Maven仓库

在Maven中,任何一个依赖、插件或者项目构建的输出,都可以称之为构建。

Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库。

任何一个构件都有其唯一坐标,根据这个坐标可以定义其在仓库中的唯一路径,这就是Maven仓库的布局方式。

如:groupId=org.testing

artfactId=testing

version=5.8

生成路径:org/testing/testing/5.8/testing-5.8-jdk15.jar

六、Maven的依赖

1、依赖的传递性

一个复杂的项目会包含很多依赖,也有可能包含依赖其他构件的依赖。这个是Maven的强大特征之一,它支持了传递性依赖。

依赖原则:路径优先原则,第一声明原则。

解决依赖问题:

通过调整dependency的顺序来解决:那个依赖的顺讯在前面就依赖那个

自己添加一个denpendeny来解决:因为该路径是最小的

通过exclusions元素排除不想要的传递性依赖。

2、Version解释

snapshot版本表示不稳定,处于开发中的版本,即快照版本

release:表示趋于稳定,当前停止更新,可以用于发行的斑斑。

场景:协同开发时,如果A依赖B,由于B频繁更新,B应该使用SNAPSHOT来标识自己。

3、依赖范围Scope

compile(默认):编译范围的依赖,它在编译和打包的时候都会把该依赖打包进去

test:测试依赖范围,它在编译和打包的时候不会把该依赖打包进去

provided:在编译和测试范围有效,最后生成war包时不会打包进去

rumtime:运行时依赖,编译的时候不依赖

import:导入依赖范围

system:系统依赖范围

Maven的原理和使用的更多相关文章

  1. maven 工作原理和添加jar包技巧

        相 信只要做过 Java 开发的童鞋们,对 Ant 想必都不陌生,我们往往使用 Ant 来构建项目,尤其是涉及到特别繁杂的工作量,一个 build.xml 能够完成编译.测试.打包.部署等很多 ...

  2. Maven 核心原理

    Maven 核心原理 标签 : Java基础 Maven 是每一位Java工程师每天都会接触的工具, 但据我所知其实很多人对Maven理解的并不深, 只把它当做一个依赖管理工具(下载依赖.打包), M ...

  3. Maven - 工作原理

    章节 Maven – 简介 Maven – 工作原理 Maven – Repository(存储库) Maven – pom.xml 文件 Maven – 依赖管理 Maven – 构建生命周期.阶段 ...

  4. 分享知识-快乐自己:Maven 相关原理

    依赖原则:解决模块工程之间的Jar冲突问题 1):情定设定:验证路径最短者优先原则 创建三个工程如下: Hello:并且以来 log4j.1.2.17.jar HelloFriend:依赖了工程 He ...

  5. Maven使用笔记(三)Maven的工作原理

    概述 Maven是一个项目管理工具,他包含了一个项目对象模型,一组标准集合,一个项目生命周期,一个依赖管理系统和用来运行定义生命周期阶段中插件目标的逻辑. Maven是基于约定优于配置的思想来管理代码 ...

  6. SONATYPE NEXUS搭建MAVEN私服

    1.为什么使用Nexus如果没有私服,我们所需的所有构件都需要通过maven的中央仓库和第三方的Maven仓库下载到本地,而一个团队中的所有人都重复的从maven仓库下载构件无疑加大了仓库的负载和浪费 ...

  7. CentOS安装Nexus(Maven私有库)详细配置及上传本地jar到私服

    Nexus原理 Maven的原理就是将jar从远程中央仓库下载到PC磁盘的本地仓库,当本地仓库没有发现需要的jar就会去Maven默认的远程中央仓库Maven Central(由Apache维护)中寻 ...

  8. 向西项目管理工具Maven一片

    前言 相信仅仅要做过 Java 开发的童鞋们,对 Ant 想必都不陌生,我们往往使用 Ant 来构建项目,尤其是涉及到特别繁杂的工作量.一个 build.xml 可以完毕编译.測试.打包.部署等非常多 ...

  9. Maven - Maven速成

    Maven Maven是一个项目构建和管理工具,有助于开发者快速完成项目的配置,快速建立开发环境,从而提高开发效率. 管理项目构建(build)的生命周期(清理.编译.测试.打包.发布.部署.报告等) ...

随机推荐

  1. ZeroTier 局域网组建工具

    无公网IP通过ZeroTier实现内网穿透 需求:想要在公司访问家里内网NAS,或是在家里访问公司服务 有固定的公网IP或动态的公网IP:常见的方案动态域名解析做端口转发方式等 无公网IP:常见的实现 ...

  2. Linux--info命令 ,help命令,man命令(帮助)

    Info和man命令一样都是帮助类文件 Info文件不仅包含信息,而且还包含连接到其他info文件的链接. 如何使用info显示希望的内容 * 如何操纵Info系统 * 如何显示Info的帮助信息. ...

  3. Ngnix简介

    Nginx的产生 没有听过Nginx?那么一定听过它的"同行"Apache吧!Nginx同Apache一样都是一种WEB服务器.基于REST架构风格,以统一资源描述符(Unifor ...

  4. JS垂直落体回弹原理

    /* *JS垂直落体回弹原理 */ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...

  5. 设计模式课程 设计模式精讲 8-10 单例设计模式-ThreadLocal线程单例

    1 课程讲解 1.1 应用场景 2 代码演练 2.1 threadLocal应用 1 课程讲解 1.1 应用场景 多线程的时候: 使用同步锁使用时间换空间的方式,(线程排队时间比较长) 而使用thre ...

  6. java读取ini文件

    ini工具类; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import j ...

  7. 题解:luogu P3909

    这个题拖了快三个月了,只因缺个快速乘(气愤.jpg). 题目链接:P3909 异或之积 你确定没人用前缀和,后缀和吗? 蒟蒻想法与众不同! 我们实验\(A[]={1,2,3,4}\). 这里计不乘6时 ...

  8. Python2 和 Python3 编码问题

    基本存储单元 位(bit, b):二进制数中的一个数位,可以是0或者1,是计算机中数据的最小单位. 字节(Byte,B):计算机中数据的基本单位,每8位组成一个字节. 1B = 8b 各种信息在计算机 ...

  9. GitHub fork 合作开发 - 快速实现版

    目录 一 预备条件 二 fork项目 三 将项目clone到本地 四 push代码到自己的仓库 五 通过pull request提交代码 六 通过本地配置upstream来同步更新主repo的内容 七 ...

  10. 083、Java数组之方法返回数组

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...