本文内容主要摘自:http://www.konghao.org/index 内部视频

                             http://www.ibm.com/developerworks/cn/java/j-lo-maven/

一、 简介:

1. 下载maven,配置path

2. 修改本地仓库位置,修改maven目录下的conf中的setting.xml,增加如下内容localRepository配置,例如:<localRepository>D:\maven\Repository</localRepository>

3. maven 配置说明:

      groupId:  当前Maven项目隶属的实际项目,可以是域名反向,一般用项目名称来表示

   artifacId:  该元素定义实际项目中的一个Maven项目(模块),推荐的做法是使用实际项目名-模块名称来表示

      version:  当前版本

      packaging:定义Maven项目的打包方式。首先,打包方式通常与所生成构件的文件扩展名对应。jar包和war包会使用不同的命令,当不定义packaging的时候,默认使用jar

4. 代码和资源存放位置:

源代码应该放置到src/main/java中

源代码的资源文件应该放置在src/main/resources文件夹中

测试代码应该放置到src/test/java中

测试代码的资源文件应该放置在src/test/resources文件夹中

5. mvn 常用命令:

mvn clean -->表示运行清理操作(会默认把target文件夹中的数据清理)

mvn clean compile-->表示先运行清理之后运行编译,会见代码编译到target文件夹中

mvn clean test-->运行清理和测试

mvn clean package-->运行清理和打包

mvn clean install-->运行清理和安装,会将打好的包安装到本地仓库中,以便其他的项目可以调用

mvn clean deploy-->运行清理和发布(发布到私服上面)

6. maven 项目生成方式:

1). mvn archetype generate可以自动完成这个骨架的建立

2). 使用eclipse开发maven项目

a). 配置本地自定义maven路径:

b). 右键 -- > new -- > maven project ,然后可以根据需求创建需要的maven项目

aa). 在New Maven Project 对话框中选择:create a simple project ,创建一个简单的项目,不包括项目目录。

bb). 下一步,catalog选择Internal 。Artifact Id 选择maven-archetype-quickstart创建一个简单的java项目,

选择maven-archetype-webapp创建一个简单的web项目。

          The folder is already a source folder处理方式:右键build path -> configure build path -> source ,选择 src/main/java、src/test/java删除,然后再新建。

二、依赖

我们项目中依赖的 Jar 包可以通过依赖的方式引入,通过在 dependencies 元素下添加 dependency 子元素,可以声明一个或多个依赖。通过控制依赖的范围,

可以指定该依赖在什么阶段有效。

1. 依赖包的查询:

1). 所有的依赖都是通过坐标来进行存储的(GAV : groupId , artifactId , version )

2). 有一些网上的仓库提供了坐标的查询(http://mvnrepository.com/)

3). 通过<dependencies>设置依赖:

     <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>

maven是如何搜索依赖的?首先会在本地仓库查询如果本地仓库没有,就去中央仓库查询

2. 依赖会被传递:

A-->C  B-->A ==> B-->C(这种依赖是基于compile这个范围进行传递)

对于依赖的传递而言,主要是针对compile作用域传递

3. 依赖传递的冲突问题:

1). a-->b1.0 c-->b1.1 d-->a和c,这个时候在d的pom中,哪一个依赖先写就使用先写依赖的版本,如果d--><d>a</d><d>c</d>-->依赖版本是b1.0

2). a-->b1.0 c-->b1.1 d-->a和c-->b1.0 f-->d,c,如果路径的长短不一致就选择最小路径 , f-->b1.1

3). 如果希望精确的控制依赖包,可以使用依赖的排除功能进行控制

4. 依赖的范围(scope声明):

1). test范围指的是测试范围内有效,在编译和打包的时候都不会使用这个依赖

2). compile范围指的是编译范围有效,在编译和打包时都会将依赖存储进去

3). provided依赖:在编译和测试的过程有效,最后生成war包时不会加入,诸如:servlet-api,因为servlet-api,tomcat等web服务器已经存在了,如果再打包会冲突

4). runtime在运行的时候依赖,在编译的时候不依赖

默认的依赖范围是compile

5. 聚合和继承:

1). 聚合:现实中一个项目往往是由多个 project 构成的,在进行构建时,我们当然不想针对多个 project 分别执行多次构建命令,这样极容易产生遗漏也会大大

降低效率。Maven 的聚合功能可以通过一个父模块将所有的要构建模块整合起来,将父模块的打包类型声明为 POM,通过 <modules> 将各模块集中到父

POM 中。其中 <module></module> 中间的内容为子模块工程名的相对路径。例如:

2). 继承:在面向对象的编程中我们学会了继承的概念,继承是可重用行即消除重复编码的行为。Maven 中继承的用意和面向对象编程中是一致的。

与聚合的实现类似,我们通过构建父模块将子模块共用的依赖,插件等进行统一声明,在聚合和继承同时使用时,我们可以用同一个父模块来完成这两个功能。

父文件:

子文件:

由于父模块只是用来声明一些可共用的配置和插件信息,所以它也像聚合模块一样只需要包括一个 POM 文件,其它的项目文件如 src/main/java 是不需要的。

聚合和继承存在一些共性和潜在的联系,在实际的应用中,经常将聚合模块的父模块和继承的父模块定义为同一个。并不是所有的 POM 元素都可以被继承,下图

是一个可继承的元素列表。

名称 描述
groupId 项目组 ID
version 项目版本
description 描述信息
organization 组织信息
inceptionYear 创始年份
url 项目的 url 地址
developers 开发者
contributors 贡献者信息
distributionManagerment 部署信息
issueManagement 缺陷跟踪系统
ciManagement 持续继承信息
scm 版本控制信息
mailingList 邮件列表信息
properties 自定义的属性
dependencies 依赖配置
dependencyManagement 依赖管理配置
repositories 仓库配置
build 源码目录,插件管理等配置
reporting 报告配置

6. 版本管理:

总版本号.分支版本号.小版本号-里程碑版本

总版本号的变动一般表示框架的变动

分支版本号:一般表示增加了一些功能

小版本号:在分支版本上面进行bug的修复

里程碑:SNAPSHOT-->alpha-->beta-->release-->GA

user0.0.1-SNAPSHOT-->user0.0.1-Release--->user1.0.0SHAPSHOT -->user1.0.0-Rlease

-->user0.1.0-SNAPSHOT-->user0.1.0-Rlease

7.  去除依赖:

依赖是具有传递性的,例如 Project A 依赖于 Project B,B 依赖于 C,那么 B 对 C 的依赖关系也会传递给 A,如果我们不需要这种传递性依赖,也可以用 <optional>

去除这种依赖的传递

 <dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
<optional>true<optional>
</dependency>

假设第三方的 jar 包中没有使用 <optional> 来去除某些依赖的传递性,那么可以在当前的 POM 文件中使用 <exclusions> 元素声明排除依赖,exclusions 可以包含一个或者

多个 exclusion 子元素,因此可以排除一个或者多个传递性依赖。

   <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>

maven 介绍(一)的更多相关文章

  1. 项目管理利器maven学习笔记(一):maven介绍及环境搭建

    maven介绍 maven下载与环境搭建 http://maven.apache.org/download.cgi# 解压到指定位置,比如我解压到D盘 设置maven环境变量 添加一个变量名,变量值为 ...

  2. maven 介绍(zz )

    Maven 编辑     目录 1简介 2特点 3常用命令 4推荐书籍 5Win7配置 6生命周期     1   1简介 Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构 ...

  3. Mave实战(1)——Maven介绍

    目录 1. Maven介绍 1.1. 何为Maven 1.1.1. Maven是优秀的构建工具 1.1.2. Maven不仅仅是构建工具 1. Maven介绍 1.1. 何为Maven Maven是一 ...

  4. Maven介绍及环境搭建

    Maven介绍及环境搭建 Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建.报告和文档的软件项目管理工具. 下载Maven boot:类加载器框架,Maven使用它加在自 ...

  5. Maven介绍及安装

      1.maven是一个管理第三方库的jar package 2.从该页面下载相应的Maven jar包(http://maven.apache.org/download.cgi),linux OS下 ...

  6. jenkins及Maven介绍

    一.环境介绍 随着软件开发需求及复杂度的不断提高,团队开发成员之间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.Jenkins自动化部署可以解决集成.测试.部署等重复性的 ...

  7. Maven快速入门(一)Maven介绍及环境搭建

    做开发的程序员都知道,在系统开发需要各自各样的框架.工具.其中有一种工具不管你是初级程序员还是高级程序员都必须熟练掌握的,那就是项目管理工具(maven.ant.gradle).接下来就总结Maven ...

  8. Maven 介绍

    1.maven的用途maven是一个项目构建和管理的工具,提供了帮助管理 构建.文档.报告.依赖.scms.发布.分发的方法.可以方便的编译代码.进行依赖管理.管理二进制库等等.maven的好处在于可 ...

  9. Maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置

    由浅入深,主要介绍maven的用途.核心概念(Pom.Repositories.Artifact.Build Lifecycle.Goal).用法(Archetype意义及创建各种项目).maven常 ...

  10. maven介绍

    Maven Maven的概念: Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件. Maven的作用: Maven可以帮助我们一键管理项目 1.管 ...

随机推荐

  1. 实际用户ID,有效用户ID,保存的设置用户ID

    Unix中常见的几个概念,下面做一个解释. 首先需要明确一点,这几个概念都是和进程相关的. real user ID表示的是实际上进程的执行者是谁,effective user ID主要用于校验该进程 ...

  2. mciSendCommand 音频视频播放命令函数

    //打开设备 //typedef struct { //DWORD dwCallback;        //指定一个窗口句柄 //MCIDEVICEID wDeviceID;   //为成功打开的文 ...

  3. anguglar 2+ md5加密

    1.安装 npm install ts-md5 --save 2.使用 import {Md5} from "ts-md5/dist/md5"; constructor() {co ...

  4. HDFS 常用Shell命令

    HDFS Shell命令 概述 HDFS Shell命令允许使用命令行在HDFS存储中进行文件夹和文件操作. 如文件夹的增删改查.文件的增删改查等. 开始练习hadoop时,打开Linux之后要用 s ...

  5. hadoop运维问题记录

    hadoop综合问题记录 1.hdfs无法启动 错误: 2018-04-25 14:36:09,293 - Retrying after 10 seconds. Reason: Execution o ...

  6. Truncate有外键约束的表

    SET FOREIGN_KEY_CHECKS=0; TRUNCATE TABLE table_name; SET FOREIGN_KEY_CHECKS=1;

  7. git 删除所有提交下的某个文件

    git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch upload/*' --prune-empty - ...

  8. python定义函数时默认参数注意事项

    如果在调用一个函数时,没有传递默认参数,则函数内的默认参数是对函数的默认参数属性__defaults__的引用, 如 def func(arg1=[]): arg1.append(2) 调用func时 ...

  9. 具体解释linux下的串口通讯开发

    串行口是计算机一种经常使用的接口,具有连接线少.通讯简单,得到广泛的使用.经常使用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统. ...

  10. springboot设置返回值的编码

    /** * @param params * @return 志诚阿福 来访问 */ @PostMapping(value = "/fromAFu", produces = &quo ...