一、Maven介绍

我们在开发项目的过程中,会使用一些开源框架、第三方的工具等等,这些都是以jar包的方式被项目所引用,并且有些jar包还会依赖其他的jar包,我们同样需要添加到项目中,所有这些相关的jar包都会作为项目的依赖。通常,一个Java EE项目所依赖的jar包会有很多。然而,这还并非是主要问题,在管理这些jar包过程中,jar包的版本往往是最令人头疼的问题。选择一个jar包的版本,需要考虑它所依赖的jar包是否支持这个版本,并且还需要确认依赖它的jar包能不能对这个版本兼容。所以,在过去的构建项目过程中,整理出这么一堆能让项目正常运行的jar包之后,这个lib目录就会变为禁区。jar包版本更新了,我们也很少会自找麻烦去触碰它。至于是不是存在冗余的jar包?能正常运行就好了嘛。。。。
Maven的出现,解决了开发过程中的这一难题。它可以对项目依赖的jar包进行管理,可以让你的项目保持基本的依赖,排除冗余jar包,并且可以让你非常轻松的对依赖的jar包进行版本升级。而这些仅仅是Maven最基本的功能,它可以在这基础上对项目进行清理、编译、测试、打包、发布等等构建项目的工作。
 
可以说,Maven是现在Java社区中最强大的项目管理和项目构建工具,而更加值得庆幸的是,这样一个强大的工具,它的使用也是非常简单的。
 
现在,JavaEE项目使用的开源软件都可以通过Maven来获取,并且,越来越多的公司也开始使用Maven来管理构建项目了。

二、Maven下载安装

1、配置Java运行环境
Maven依赖Java运行环境,因此使用Maven之前需要配置Java的运行环境。下载并安装JDK,配置JDK的环境变量:
    JAVA_HOME=D:DevToolJavajdk1.6.0_38
    在path中加入%JAVA_HOME%in;
2、安装Maven
Maven下载地址:http:maven.apache.org/download.cgi
下载Maven最新版本的二进制zip压缩包就可以,如:apache-maven-3.0.5-bin.zip
下载完成后,解压,例如我们把解压后的文件夹放在D:DevTool目录下。
然后,将Maven的bin目录添加到path环境变量中,我们这里就是这个目录:D:DevToolapache-maven-3.0.5in
在命令提示符下,输入mvn -v测试一下,

三、Maven依赖管理

前面讲了,Maven最核心的就是对依赖jar包的管理,那么它是通过什么方式来进行管理的呢?
Maven要求每一个jar包都必须明确定义自己的坐标,Maven就是通过这个坐标来查找管理这些jar包的。
在Maven中,一个jar包的坐标是由它的groupId、artifactId、version这些元素来定义的。例如:
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.3.8</version>
    <packaging>jar</packaging>
groupId:表明其所属组织或公司及其所属项目,命名规则为组织或公司域名反转加项目名称。
artifactId:项目的模块名,通常与实际项目名称一致。模块的命名通常为项目名前缀加模块名。
version:当前项目的版本号。
packaging:定义项目的打包方式,可选值有jar、war、pom。默认为jar
注::一个组织或公司都会有很多的项目,而每个项目下都会划分多个模块,在开发中我们可以灵活选择依赖某个模块。而Maven管理的jar包基本都是模块性质的项目构建出的jar包。所以,artifactId通常都是模块名,而不是项目名称。项目名称是和组织名称组合作为groupId来使用的。

Maven的配置文件中dependencies元素包含了所有依赖的jar包,每一个jar包依赖使用dependency元素定义。
在声明一个jar包依赖时,除了指定groupId、artifactId、version这三项基本坐标外,还可以使用使用以下元素进行配置:
scope元素:指定依赖的范围
exclusions元素:排除传递性依赖
 
Maven有以下几种依赖范围:
compile:编译依赖范围(默认值),依赖在编译、测试、运行期间都有效。
test:测试依赖范围,只对测试的classpath有效,在编译或运行时无法使用指定为test的依赖包。
provided:已提供的依赖范围,只对编译和测试的classpath有效,运行期间不会使用这个依赖。例如servlet-api,在运行时容器已经提供,不需要再重复引入。
runtime:运行时依赖范围,编译时无效,只在测试和运行时使用这个依赖。
system:系统依赖范围,和provided范围一致,但是provided是使用容器提供依赖,system是使用系统提供依赖,需要指定依赖文件路径。
 
传递性依赖,是指依赖包对其他包的依赖,比如,我们依赖struts2-core,而strtus2-core需要依赖xwork-core、ognl等,Maven会将这些传递性依赖同时引入项目之中。这也是Maven的一大优点,简化了我们对jar包依赖的管理。而有时我们希望替换某个传递性依赖时,就需要使用exclusions排除掉这个传递性依赖,然后再添加我们自己要替换的依赖包。

四:mvn常用命令

Maven常用命令:

  1. 创建Maven的普通java项目: 
       mvn archetype:create 
       -DgroupId=packageName 
       -DartifactId=projectName  
       如:mvn archetype:create  -DgroupId=com.test.mvn -DartifactId=testmvn 
    2. 创建Maven的Web项目:   
        mvn archetype:create 
        -DgroupId=packageName    
        -DartifactId=webappName 
        -DarchetypeArtifactId=maven-archetype-webapp    
        
        如:   mvn archetype:create -DgroupId=com.test.mvn    -DartifactId=webappName -DarchetypeArtifactId=maven-archetype-webapp
    3. 编译源代码: mvn compile 
    4. 编译测试代码:mvn test-compile    
    5. 运行测试:mvn test   
    6. 产生site:mvn site   
    7. 打包:mvn package   
    8. 在本地Repository中安装jar:mvn install 
    9. 清除产生的项目:mvn clean   
    10. 生成eclipse项目:mvn eclipse:eclipse

    1. 生成idea项目:mvn idea:idea  
      12. 组合使用goal命令,如只打包不测试:mvn -Dtest package   
      13. 编译测试的内容:mvn test-compile  
      14. 只打jar包: mvn jar:jar  
      15. 只测试而不编译,也不测试编译:mvn test -skipping compile -skipping test-compile 
            ( -skipping 的灵活运用,当然也可以用于其他组合命令)  
      16. 清除eclipse的一些系统设置:mvn eclipse:clean

ps:

一般使用情况是这样,首先通过cvs或svn下载代码到本机,然后执行mvn eclipse:eclipse生成ecllipse项目文件,然后导入到eclipse就行了;修改代码后执行mvn compile或mvn test检验,也可以下载eclipse的maven插件。

mvn -version/-v               显示版本信息 
mvn archetype:generate        创建mvn项目 
mvn archetype:create -DgroupId=com.oreilly -DartifactId=my-app   创建mvn项目

mvn package              生成target目录,编译、测试代码,生成测试报告,生成jar/war文件 
mvn jetty:run            运行项目于jetty上, 
mvn compile              编译 
mvn test                 编译并测试 
mvn clean                清空生成的文件 
mvn site                 生成项目相关信息的网站 
mvn -Dwtpversion=1.0 eclipse:eclipse        生成Wtp插件的Web项目 
mvn -Dwtpversion=1.0 eclipse:clean          清除Eclipse项目的配置信息(Web项目) 
mvn eclipse:eclipse                         将项目转化为Eclipse项目

mvn deploy:deploy-file -DgroupId=com -DartifactId=client -Dversion=0.1.0 -Dpackaging=jar -Dfile=d:client-0.1.0.jar -DrepositoryId=maven-repository-inner -Durl=ftp://xxxxxxx/opt/maven/repository/

发布第三方Jar到本地库中:

mvn install:install-file -DgroupId=com -DartifactId=client -Dversion=0.1.0 -Dpackaging=jar -Dfile=d:client-0.1.0.jar

-DdownloadSources=true

-DdownloadJavadocs=true

mvn -e              显示详细错误 信息. 
mvn validate        验证工程是否正确,所有需要的资源是否可用。 
mvn test-compile    编译项目测试代码。 。 
mvn integration-test     在集成测试可以运行的环境中处理和发布包。 
mvn verify               运行任何检查,验证包是否有效且达到质量标准。     
mvn generate-sources     产生应用需要的任何额外的源代码,如xdoclet。

常用命令: 
mvn -v 显示版本 
mvn help:describe -Dplugin=help 使用 help 插件的  describe 目标来输出 Maven Help 插件的信息。 
mvn help:describe -Dplugin=help -Dfull 使用Help 插件输出完整的带有参数的目标列 
mvn help:describe -Dplugin=compiler -Dmojo=compile -Dfull 获取单个目标的信息,设置  mojo 参数和  plugin 参数。此命令列出了Compiler 插件的compile 目标的所有信息 
mvn help:describe -Dplugin=exec -Dfull 列出所有 Maven Exec 插件可用的目标 
mvn help:effective-pom 看这个“有效的 (effective)”POM,它暴露了 Maven的默认设置

mvn archetype:create -DgroupId=org.sonatype.mavenbook.ch03 -DartifactId=simple -DpackageName=org.sonatype.mavenbook 创建Maven的普通java项目,在命令行使用Maven Archetype 插件 
mvn exec:java -Dexec.mainClass=org.sonatype.mavenbook.weather.Main Exec 插件让我们能够在不往 classpath 载入适当的依赖的情况下,运行这个程序 
mvn dependency:resolve 打印出已解决依赖的列表 
mvn dependency:tree 打印整个依赖树

mvn install -X 想要查看完整的依赖踪迹,包含那些因为冲突或者其它原因而被拒绝引入的构件,打开 Maven 的调试标记运行 
mvn install -Dmaven.test.skip=true 给任何目标添加maven.test.skip 属性就能跳过测试
mvn install assembly:assembly 构建装配Maven Assembly 插件是一个用来创建你应用程序特有分发包的插件

mvn jetty:run     调用 Jetty 插件的 Run 目标在 Jetty Servlet 容器中启动 web 应用 
mvn compile       编译你的项目 
mvn clean install 删除再编译

mvn hibernate3:hbm2ddl 使用 Hibernate3 插件构造数据库

maven教程基础的更多相关文章

  1. maven教程全攻略

    maven教程全攻略 我们在开发项目的过程中,会使用一些开源框架.第三方的工具等等,这些都是以jar包的方式被项目所引用,并且有些jar包还会依赖其他的jar包,我们同样需要添加到项目中,所有这些相关 ...

  2. Java-Maven-Runoob:Maven教程

    ylbtech-Java-Maven-Runoob:Maven教程 1.返回顶部 1. Maven 教程 Maven 翻译为"专家"."内行",是 Apache ...

  3. Maven教程:tutorialspoint-maven

    来自turorialspoint的Maven教程(英文),官网:http://www.tutorialspoint.com/maven/index.htm 这个教程在国内已经被翻译成中文,官网:htt ...

  4. Maven教程

    找了一个很详细的maven教程 收藏下 学习网址:http://www.yiibai.com/maven/

  5. iOS10 UI教程基础窗口的内容与设置起始窗口

    iOS10 UI教程基础窗口的内容与设置起始窗口 iOS10 UI教程基础窗口的内容与设置起始窗口,本章我们从iOS10开发中UI的基础知识开始讲解,其中包括了窗口.视图以及UI层次结构和Views的 ...

  6. Maven 教程

    Maven 教程 序:几次对Maven 的学习,都因为各种原因 而中途切断了,再一次学习的时候,又不得不重新开始,结果发现 又不记得步骤 又找不到对应的文档.别人写的再好,终究比不过自己亲手实践的得出 ...

  7. SQLAlchemy 教程 —— 基础入门篇

    SQLAlchemy 教程 -- 基础入门篇 一.课程简介 1.1 实验内容 本课程带领大家使用 SQLAlchemy 连接 MySQL 数据库,创建一个博客应用所需要的数据表,并介绍了使用 SQLA ...

  8. Maven教程4(私服-nexus)

    仓库管理器也叫私服或代理仓库 仓库管理器有两个服务目的:首先它的角色是一个高度可配置的介于你的组织与公开Maven仓库之间的代理,其次它为你的组织提供了一个可部署你组织内部生成的构件的地方. 1Nex ...

  9. Maven教程2(Eclipse配置及maven项目)

    Maven教程1(介绍安装和配置) Eclipse中配置maven 1.Eclipse中默认集成的有Maven 可以使用默认的,本地仓库在当前用户下的.m2文件夹下. 2.配置我们自己安装的maven ...

随机推荐

  1. 蓝桥杯—ALGO-12 幂方分解(递归递推)

    问题描述 任何一个正整数都可以用2的幂次方表示.例如: 137=27+23+20 同时约定方次用括号来表示,即ab 可表示为a(b). 由此可知,137可表示为: 2(7)+2(3)+2(0) 进一步 ...

  2. bzoj1091

    题解: 暴力枚举顺序 然后计算几何 代码: #include<bits/stdc++.h> ],lp=; double v1,v2,ans=1e10; struct pos { doubl ...

  3. L1-036 A乘以B

    看我没骗你吧 —— 这是一道你可以在 10 秒内完成的题:给定两个绝对值不超过 100 的整数 A 和 B,输出 A 乘以 B 的值. 输入格式: 输入在第一行给出两个整数 A 和 B(−100≤A, ...

  4. 20165210 Java第七周学习总结

    20165210 Java第七周学习总结 教材内容学习 第十一章学习总结 连接数据库: 1. 下载JDBC-MySQL数据库驱动 2. 加载JDBC-MySQL数据库驱动 3. 连接数据库 4. 注意 ...

  5. react 学习日记

    1.本地配置代理服务:   create-react-app 创建的react项目 package.jsoin 中 加入: "proxy": "http://localh ...

  6. IOS沙盒机制

    一,ios应用程序只能在为该程序创建的文件系统中读取文件,不可以去其他地方访问,此区域被称为沙盒 1,每个应用程序都有自己的存储空间 2,应用程序不能翻过自己的围墙去访问别的存储空间的内容. 3,应用 ...

  7. docker使用web界面管理Registry

    1:安装 docker-registry-web项目   [root@Docker ~]#docker pull atcol/docker-registry-ui   2:docker run镜像   ...

  8. 备份Windows密钥,重装后免费激活系统教程

    最重要的一点:在你重装系统之前,一定要先备份Windows密钥,不然重装系统后就查询不了原来的密钥,从而无法免费激活. 1.查询系统密钥(注册表中查询) 打开 “运行”(快捷键 win + R) 打开 ...

  9. Tomcat问题:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined ,At least one of these environment variable is needed to run this program

    一眼就能看出来是jdk的环境有问题,但是用了这么久的jdk一直都配置的好好的,怎么一到Tomcat上就这么矫情了. 最后查解决方案,原来是我的jdk从官网直接下载的,虽然我修改了java_home,但 ...

  10. (6)time&datetime(时间模块)

    什么是时间模块 就是处理时间相关的功能 如用户注册的时间.统计程序运行的时间等 time 模块  计算机中有三种时间 1.时间戳 从1970年到今天,这个时间段中间经历的秒数 获取时间戳:time.t ...