Maven学习总结

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

参考资料:Maven in Action

1.什么是maven坐标?
maven坐标是由groupId,artifactId,version,packaging,classifier组成。只要提供正确的坐标元素,maven就能找到对应的构件。所以说maven坐标也可以说成是构件的地址,也是其他Maven项目依赖的标准。
2.Maven坐标详解
com.myself
sayhello
0.0.1-SNAPSHOT
jar
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.依赖的配置

   
      junit
      junit
      4.7
      test
   

   
    test
helloworld
0.0.1-SNAPSHOT

 

根元素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元素显示地指定依赖文件的路径,不建议使用

    test
helloworld
0.0.1-SNAPSHOT
system
${java.home}/lib/rt.jar

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(用的很少)

    test
helloworld
0.0.1-SNAPSHOT
compile
true

B项目有两个可选依赖,A依赖B时,B的可选依赖是不会被传递的
9.排除依赖
排除依赖用来过滤不需要的传递性依赖。

    test
helloworld
0.0.1-SNAPSHOT

 
     com.test
 project-c
 



10.归类依赖
同一项目不同模块时,所有模块版本都是相同的,升级时这些依赖的版本会一起升级

1.0.0
test
helloworld
0.0.1-SNAPSHOT

    2.5.6


   
      org.springframework
      spring-core
      ${springframework.version}
   

   
    org.springframework
spring-beans
${springframework.version}



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 插件构造数据库




















































你可能感兴趣的:(Maven)