Maven使用详解

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

什么是Maven的?

如今我们构建一个项目需要用到很多第三方的类库,如写一个使用春天的网络项目就需要引入大量的JAR包。一个项目的Jar包的数量之多往往让我们瞠目结舌,并且罐包之间的关系错综复杂,一个罐包往往又会引用其他罐包,缺少任何一个罐包都会导致项目编译失败。 
以往开发项目时,程序员往往需要花较多的精力在引用的Jar包搭建项目环境上,而这一项工作尤为艰难,少一个Jar包,多一个Jar包往往会报一些让人摸不着头脑的异常。 
而Maven就是一款帮助程序员构建项目的工具,我们只需要告诉Maven需要哪些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的源文件编译成类文件

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

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

  5. 清洁:删除目标文件夹

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

什么是Maven的仓库?

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

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

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

什么是“坐标”?

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



ch.qos.logback

logback-classic

1.1.1

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

传递依赖与排除依赖

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




ch.qos.logback

logback-classic



依赖冲突

若项目中多个罐同时引用了相同的瓶子时,会产生依赖冲突,但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的只会引用引用路径最短的罐子。

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

聚合

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

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



../模块1

../模块2

../模块3

继承

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

  2. 如何实现继承?

    • 父POM配置:将需要继承的瓶子包的坐标放入标签即可。






org.apache.shiro

shiro-spring

1.2.2





  • 子POM配置:


父pom所在项目的groupId

父pom所在项目的artifactId

父pom所在项目的版本号

使用Maven的构建的Web项目

  1. New Maven项目:选择WebApp: 

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



javax.servlet

javax.servlet-api

3.0.1



provided

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

  2. 勾选:动态Web模块 
     

  3. 删掉测试目录 
     

  4. 在POM中加入码头的插件,并设置JDK版本:





org.apache.maven.plugins

maven-compiler-plugin



1.8

1.8









org.eclipse.jetty

jetty-maven-plugin

9.3.10.v20160621





package







  1. 运行项目: 
     

  2. 输入:码头:运行 
     

  3. 访问127.0.0.1:8080 

pom.xml的详解

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



























4.0.0



cn.erhuowang



erhuowang-maven2



war



1.0-SNAPSHOT



erhuo-maven



http://erhuowang.cn



A maven project to study maven.

















erhuowang



http://erhuowang.cn













































Demo [email protected] [email protected] [email protected] [email protected] HELLO WORLD chaimm [email protected] Project Manager Architect demo http://erhuowang.cn No -5 Apache 2 http://www.baidu.com/erhuwoang/LICENSE-2.0.txt repo A business-friendly OSS license scm:svn:http://svn.baidu.com/banseon/maven/banseon/banseon-maven2-trunk(dao-trunk) scm:svn:http://svn.baidu.com/banseon/maven/banseon/dao-trunk http://svn.baidu.com/banseon demo http://www.erhuowang.cn ...... ...... Windows XP Windows x86 5.1.2600 mavenVersion 2.0.3 /usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/ /usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/ ...... ...... ...... ...... ...... ...... banseon-repository-proxy banseon-repository-proxy http://192.168.1.169:9999/repository/ default ...... org.apache.maven maven-artifact 3.8.1 jar test spring-core org.springframework true ...... banseon-maven2 banseon maven2 file://${basedir}/target/deploy banseon-maven2 Banseon-maven2 Snapshot Repository scp://svn.baidu.com/banseon:/usr/local/maven-snapshot banseon-site business api website scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web

 

你可能感兴趣的:(Maven)