Maven配置详解

本文转:http://blog.csdn.net/u010425776/article/details/52027706

什么是Maven?

如今我们构建一个项目需要用到很多第三方的类库,如写一个使用spring的Web项目就需要引入大量的jar包。一个项目Jar包的数量之多往往让我们瞠目结舌,并且Jar包之间的关系错综复杂,一个Jar包往往又会引用其他Jar包,缺少任何一个Jar包都会导致项目编译失败。 
以往开发项目时,程序员往往需要花较多的精力在引用Jar包搭建项目环境上,而这一项工作尤为艰难,少一个Jar包、多一个Jar包往往会报一些让人摸不着头脑的异常。 
而Maven就是一款帮助程序员构建项目的工具,我们只需要告诉Maven需要哪些Jar 包,它会帮助我们下载所有的Jar,极大提升开发效率。

安装Maven 和 Maven的Eclipse插件

http://blog.csdn.net/qjyong/article/details/9098213

Maven规定的目录结构

若要使用Maven,那么项目的目录结构必须符合Maven的规范

Maven基本命令

  1. -v:查询Maven版本 
    本命令用于检查maven是否安装成功。 
    Maven安装完成之后,在命令行输入mvn -v,若出现maven信息,则说明安装成功。

  2. compile:编译 
    将Java源文件编译成class文件

  3. test:测试项目 
    执行test目录下的测试用例

  4. package:打包 
    将项目打成jar包

  5. clean:删除target文件夹

  6. install:安装 
    将当前项目放到Maven的本地仓库中。供其他项目使用

什么是Maven仓库?

Maven仓库用来存放Maven管理的所有Jar包。分为:本地仓库 和 中央仓库。

  • 本地仓库 
    Maven本地的Jar包仓库。
  • 中央仓库 
    Maven官方提供的远程仓库。

当项目编译时,Maven首先从本地仓库中寻找项目所需的Jar包,若本地仓库没有,再到Maven的中央仓库下载所需Jar包。

什么是“坐标”?

在Maven中,坐标是Jar包的唯一标识,Maven通过坐标在仓库中找到项目所需的Jar包。 
如下代码中,groupId和artifactId构成了一个Jar包的坐标。

 
  1. ch.qos.logback

  2. logback-classic

  3. 1.1.1

  • groupId:所需Jar包的项目名
  • artifactId:所需Jar包的模块名
  • version:所需Jar包的版本号

传递依赖 与 排除依赖

  • 传递依赖:如果我们的项目引用了一个Jar包,而该Jar包又引用了其他Jar包,那么在默认情况下项目编译时,Maven会把直接引用和简洁引用的Jar包都下载到本地。
  • 排除依赖:如果我们只想下载直接引用的Jar包,那么需要在pom.xml中做如下配置:(将需要排除的Jar包的坐标写在中)
 
  1. ch.qos.logback

  2. logback-classic

依赖冲突

若项目中多个Jar同时引用了相同的Jar时,会产生依赖冲突,但Maven采用了两种避免冲突的策略,因此在Maven中是不存在依赖冲突的。

  • 短路优先
 
  1. 本项目——>A.jar——>B.jar——>X.jar

  2. 本项目——>C.jar——>X.jar

若本项目引用了A.jar,A.jar又引用了B.jar,B.jar又引用了X.jar,并且C.jar也引用了X.jar。 
在此时,Maven只会引用引用路径最短的Jar。

  • 声明优先 
    若引用路径长度相同时,在pom.xml中谁先被声明,就使用谁。

聚合

  1. 什么是聚合? 
    将多个项目同时运行就称为聚合。

  2. 如何实现聚合? 
    只需在pom中作如下配置即可实现聚合:

 
  1. ../模块1

  2. ../模块2

  3. ../模块3

继承

  1. 什么是继承? 
    在聚合多个项目时,如果这些被聚合的项目中需要引入相同的Jar,那么可以将这些Jar写入父pom中,各个子项目继承该pom即可。

  2. 如何实现继承?

    • 父pom配置:将需要继承的Jar包的坐标放入标签即可。
 
  1. org.apache.shiro

  2. shiro-spring

  3. 1.2.2

  • 子pom配置:
 
  1. 父pom所在项目的groupId

  2. 父pom所在项目的artifactId

  3. 父pom所在项目的版本号

使用Maven构建Web项目

  1. New Maven项目:选择WebApp: 

  2. 若使用JSP,需添加Servlet依赖: 
    注:Servlet依赖只在编译和测试时使用!

 
  1. javax.servlet

  2. javax.servlet-api

  3. 3.0.1

  4. provided

  1. 在Bulid Path中设置resource输出目录: 

  2. 勾选:Dynamic Web Module 
     

  3. 删掉测试目录 
     

  4. 在pom中加入jetty的插件,并设置JDK版本:

 
  1. org.apache.maven.plugins

  2. maven-compiler-plugin

  3. 1.8

  4. 1.8

  5.  
  6. org.eclipse.jetty

  7. jetty-maven-plugin

  8. 9.3.10.v20160621

  9. package

  1. 运行项目: 
     

  2. 输入:jetty:run 
     

  3. 访问127.0.0.1:8080 

pom.xml详解

pom.xml是Maven的核心,你的项目需要什么Jar包就在pom.xml里面配置。当编译项目时Maven读取该文件,并从仓库中下载相应的Jar包。

 
  1. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd">

  3. 4.0.0

  4. cn.erhuowang

  5. erhuowang-maven2

  6. war

  7. 1.0-SNAPSHOT

  8. erhuo-maven

  9. http://erhuowang.cn

  10. A maven project to study maven.

  11. erhuowang

  12. http://erhuowang.cn

  13. Demo

  14. [email protected]

  15. [email protected]

  16. [email protected]

  17. [email protected]

  18. HELLO WORLD

  19. chaimm

  20. [email protected]

  21. Project Manager

  22. Architect

  23. demo

  24. http://erhuowang.cn

  25. No

  26. -5

  27. Apache 2

  28. http://www.baidu.com/erhuwoang/LICENSE-2.0.txt

  29. repo

  30. A business-friendly OSS license

  31. scm:svn:http://svn.baidu.com/banseon/maven/banseon/banseon-maven2-trunk(dao-trunk)

  32. scm:svn:http://svn.baidu.com/banseon/maven/banseon/dao-trunk

  33. http://svn.baidu.com/banseon

  34. demo

  35. http://www.erhuowang.cn

  36. ......

  37. ......

  38. Windows XP

  39. Windows

  40. x86

  41. 5.1.2600

  42. mavenVersion

  43. 2.0.3

  44. /usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/

  45. /usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/

  46. ......

  47. ......

  48. ......

  49. ......

  50. ......

  51. ......

  52. banseon-repository-proxy

  53. banseon-repository-proxy

  54. http://192.168.1.169:9999/repository/

  55. default

  56. ......

  57.  
  58. org.apache.maven

  59. maven-artifact

  60. 3.8.1

  61. jar

  62. test

  63. spring-core

  64. org.springframework

  65. true

  66. ......

  67. banseon-maven2

  68. banseon maven2

  69. file://${basedir}/target/deploy

  70. banseon-maven2

  71. Banseon-maven2 Snapshot Repository

  72. scp://svn.baidu.com/banseon:/usr/local/maven-snapshot

  73. banseon-site

  74. business api website

  75. scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web

你可能感兴趣的:(maven)