本文内容主要摘自: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. JSP内置对象——response

    response对象response对象包含了响应客户端的有关信息,但在JSP中很少使用它.它是HttpServletResponse类的实例.response对象具有页面作用域,即访问一个页面时,该 ...

  2. Myeclipse下使用Maven搭建spring boot项目(第二篇)

    现在需要搭建spring boot框架,并实现一个HelloWorld的项目,让程序真正运行起来. 一.在pom.xml中引入spring-boot-start-parent,spring官方的叫st ...

  3. java中Logger.getLogger(Test.class),即log4日志的使用

    log4的使用方法: log4是具有日志记录功能,主要通过一个配置文件来对程序进行监测有两种配置方式:一种程序配置,一种文件配置有三个主要单元要了解,Logger,appender,layout. l ...

  4. css 更改input radio checkbox的样式

    html <label> <input type="checkbox" class="colored-blue"> <span c ...

  5. python egg包免安装直接使用

    import sys egg_path='egg.egg' sys.path.append(egg_path) import egg_sample

  6. because of an existing model object of the same name

    背景: 视图解析器(我们用的是velocity) 报错: because of an existing model object of the same name 按照网上给的原因 : 设置了属性ex ...

  7. [报错]Fast enumeration variables cannot be modified in ARC by default; declare the variable __strong to allow this

    今天写了下面的快速枚举for循环代码,从按钮数组subButtons中取出button,然后修改button的样式,在添加到view中 for (UIButton *button in subButt ...

  8. [译]关于JavaScript 作用域你想知道的一切

    原文连接 在学习js的过程对闭包什么的,理解不好,偶然搜到这篇文章.豁然开朗,随翻译. Javacript 中有一系列作用域的概念.对于新的JS的开发人员无法理解这些概念,甚至一些经验丰富的开发者也未 ...

  9. 并发编程 - 线程 - 1.开启线程的两种方式/2.进程与线程的区别/3.Thread对象的其他属性或方法/4.守护线程

    1.开启线程的两种方式: 进程,线程: 进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合)而线程才是cpu上的执行单位) 1.同一个进程内的多个线程共享该进程内的地址资源 2.创建线 ...

  10. Sublime Text 中文

    1.打开Sublime Text 2.Ctrl+Shift+P,输入Package Control: Install Package回车 3.输入LocalizedMenu,回车 4.点击菜单help ...