Maven学习总结

Maven用于项目构建,可以帮助我们自动下载jar包,通过插件自动将项目编译打包。

参考资料:Maven in Action

1.什么是maven坐标?
maven坐标是由groupId,artifactId,version,packaging,classifier组成。只要提供正确的坐标元素,maven就能找到对应的构件。所以说maven坐标也可以说成是构件的地址,也是其他Maven项目依赖的标准。
2.Maven坐标详解
<groupId>com.myself</groupId>
<artifactId>sayhello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
groupId:定义当前Maven项目隶属的实际项目。Maven项目和实际项目不一定是一一对应的关系,实际项目中可能会包含多个Maven项目,类似Java类中包名
artifactId:实际项目中的一个Maven项目,推荐使用实际项目名做前缀
version:当前Maven项目所处的版本
packaging:定义Maven项目的打包方式,不定义packaging时默认为jar
classifier:用来帮助定义构建输出的一些附属构件。注意,classifier不能直接定义,它是由附加插件帮助生成的,不是项目直接默认生成的
上述5个坐标元素中,groupId,artifactId,version是必须定义的,packaging是可选的(默认jar),而classifier是由插件生成的不能直接定义的。
3.Maven从哪里下载构件?
Maven内置了一个中央仓库的地址(http://repo1.maven.org/maven2),该中央仓库包含了世界上大部分流行的开源项目构件,Maven会在需要时去那里下载。
4.依赖的配置
<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.7</version>
      <scope>test</scope>
    </dependency>
    <dependency>
    <groupId>test</groupId>
<artifactId>helloworld</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
  </dependencies>
根元素project下的dependencies可以包含一个或者多个dependency元素,以声明一个或者多个项目依赖。
每个依赖可以包含的元素有:
groupId、artifactId、version,依赖的基本坐标。
type:依赖的类型,对应项目坐标定义的packaging。默认为jar
scope:依赖的范围
optional:标记依赖是否可选
exclusions:用来排除传递性依赖
5.依赖的范围
依赖范围是用来控制依赖与三种classpath(编译classpath、测试classpath、运行classpath)的关系,Maven有以下几种依赖范围:
1)Compile:编译依赖范围。如果没有指定,默认使用这个依赖范围。使用此依赖范围的Maven依赖,对于编译、测试、运行三种classpath都有效。
2)Test:测试依赖范围。使用此依赖范围的Maven依赖,只对于测试classpath有效
3)provided:已提供依赖范围。使用此依赖范围的Maven依赖,对于编译和测试classpath有效,但运行时无效。
4)runtime:运行时依赖范围。使用此依赖范围的Maven依赖,对于测试和运行classpath有效,但编译时无效。
5)system:系统依赖范围。使用此依赖范围的Maven依赖,对于编译和测试classpath有效,但运行时无效。但是,使用system范围的依赖必须通过systemPath元素显示地指定依赖文件的路径,不建议使用
<dependency>
    <groupId>test</groupId>
<artifactId>helloworld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>system</scope>
<systemPath>${java.home}/lib/rt.jar</systemPath>
</dependency>
6)import:导入依赖范围。该依赖范围不会对三种classpath产生实际的影响
归纳如下:
依赖范围(scope)     对编译classpath的影响    对测试classpath的影响    对运行classpath的影响
compile                     Y                        Y                         Y
test                        -                        Y                         -
provided                    Y                        Y                         -
runtime                     -                        Y                         Y
system                      Y                        Y                         -
6.传递性依赖
A-->B-->C
A依赖于B,B依赖C,A依赖C就称之为传递性依赖
依赖范围对传递性依赖的影响如下:-表示不传递
                 第二依赖范围:compile       test    provided     runtime   
第一依赖范围:compile          compile        -         -         runtime                      
             test             test           -         -         test
             provided         provided       -      provided     provided
             runtime          runtime        -         -         runtime
7.依赖调解
依赖调解的原则:1)路径近者优先。A-->B-->C(1.0)   A-->M-->D-->C(2.0) 前者路径为2所以A实际依赖C(1.0)             
                2)路径相同前提下,第一声明者优先。也就是谁先被解析谁优先             
8.可选依赖optional(用的很少)
<dependency>
    <groupId>test</groupId>
<artifactId>helloworld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
<optional>true</optional>
</dependency>
B项目有两个可选依赖,A依赖B时,B的可选依赖是不会被传递的
9.排除依赖
排除依赖用来过滤不需要的传递性依赖。
<dependency>
    <groupId>test</groupId>
<artifactId>helloworld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<exclusions>
  <exclusion>
     <groupId>com.test</groupId>
 <artifactId>project-c</artifactId>
  </exclusion>
</exclusions>
</dependency>
10.归类依赖
同一项目不同模块时,所有模块版本都是相同的,升级时这些依赖的版本会一起升级
<project>
<modelVesion>1.0.0</modelVesion>
<groupId>test</groupId>
<artifactId>helloworld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
    <springframework.version>2.5.6</springframework.version>
</properties>
<dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${springframework.version}</version>
    </dependency>
    <dependency>
    <groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${springframework.version}</version>
</dependency>
</dependencies>
</project>
11.maven常用命令
mvn package :打包
mvn clean:清除产生的项目
mvn install:在本地Repository中安装jar
mvn clean install:删除再编译
mvn compile:  编译源代码
mvn test-compile:编译测试代码
mvn test:运行测试
mvn site:产生site
mvn eclipse:eclipse 生成eclipse项目
mvn -Dtest package 组合使用goal命令,如只打包不测试
mvn jar:jar 只打jar包
mvn jetty:run 运行项目于jetty上
mvn -e   显示详细错误信息
mvn install -X 想要查看完整的依赖踪迹,包含那些因为冲突或者其它原因而被拒绝引入的构件,打开 Maven 的调试标记运行
mvn install -Dmaven.test.skip=true 给任何目标添加maven.test.skip 属性就能跳过测试
mvn install assembly:assembly 构建装配Maven Assembly 插件是一个用来创建你应用程序特有分发包的插件
mvn hibernate3:hbm2ddl 使用 Hibernate3 插件构造数据库




















































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值