###环境变量MAVEN_OPTS
- -Xms128m -Xmx512m
###依赖范围 依赖范围就是用来控制依赖与这三种class-path(编译classpath、测试classpath、运行class-path)的关系。
- compile:编译依赖范围(
编译、测试、运行都有效
) 如果没有指定,就会默认使用该依赖范围。使用此依赖范围的Maven依赖,对于编译、测试、运行三种classpath都有效。 - test:测试依赖范围(
测试有效如junit
) 使用此依赖范围的Maven依赖,只对于测试classpath有效,如junit - provided:已提供依赖范围(
编译测试有效,运行无效,如servlet-api
) 使用此依赖范围的Maven依赖,对于编译和测试classpath有效,但在运行时无效。典型的例子是servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提供,就不需要Maven重复地引入一遍 - runtime:运行时依赖范围(
测试运行有效,编译无效,如jdbc驱动
) 使用此依赖范围的Maven依赖,对于测试和运行classpath有效,但在编译主代码时无效。典型的例子是JDBC驱动实现,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动。 - system:系统依赖范围(
编译测试有效,运行无效
) 该依赖与三种class-path的关系,和provided依赖范围完全一致。但是,使用system范围的依赖时必须通过systemPath元素显式地指定依赖文件的路径。 - import:导入依赖范围 该依赖范围不会对三种classpath产生实际的影响。
###依赖调解
- 最短路径优先
- 第一声明优先 Maven解析后的依赖中,不可能出现groupId和artifactId相同,但是version不同的两个依赖。根据依赖调节两大原则,最后只能有一个版本。
###依赖优化的命令
- mvn dependency:list
- mvn dependency:tree
- mvn dependency:analyze
- duplicate-finder-maven-plugin
###快照版本的使用
- 开发联调时使用快照版本如2.5.1-SNAPSHOT
- SNAPSHOT更新mvn clean -U install
- 上线时发布正式版本2.5.1
###maven三套生命周期 Maven拥有三套相互独立的生命周期,它们分别为clean、default和site。
- clean生命周期的目的是清理项目
- default生命周期的目的是构建项目(compile-test-package)
- site生命周期的目的是建立项目站点。
###版本号命名规范 Maven的版本号定义约定是这样的:<主版本>.<次版本>.<增量版本>-<里程碑版本>
- 1.3.4-beta-2这往往表示了该项目或产品的第一个重大版本的第三个次要版本的第四次增量版本的beta-2里程碑。很拗口?那一个个分开解释:“1”表示了该版本是第一个重大版本;“3”表示这是基于重大版本的第三个次要版本;“4”表示该次要版本的第四个增量;最后的“beta-2”表示该增量的某一个里程碑
- 主版本:表示了项目的重大架构变更。例如,Maven 2和Maven 1相去甚远;Struts 1和Struts 2采用了不同的架构;JUnit 4较JUnit3增加了标注支持。
- 次版本:表示较大范围的功能增加和变化,及Bug修复。例如Nexus 1.5较1.4添加了LDAP的支持,并修复了很多Bug,但从总体架构来说,没有什么变化。
- 增量版本:一般表示重大Bug的修复,例如项目发布了1.4.0版本之后,发现了一个影响功能的重大Bug,则应该快速发布一个修复了Bug的1.4.1版本。
- 里程碑版本:顾名思义,这往往指某一个版本的里程碑。例如,Maven 3已经发布了很多里程碑版本,如3.0-alpha-1、3.0-alpha-2、3.0-beta-1等。这样的版本与正式的3.0相比,往往表示不是非常稳定,还需要很多测试。
###常见pom属性
- ${project.build.sourceDirectory}:项目的主源码目录,默认为src/main/java/。
- ${project.build.testSourceDirectory}:项目的测试源码目录,默认为src/test/java/。
- ${project.build.directory}:项目构建输出目录,默认为target/。
- ${project.outputDirectory}:项目主代码编译输出目录,默认为target/classes/。
- ${project.testOutputDirectory}:项目测试代码编译输出目录,默认为target/test-classes/。
- ${project.groupId}:项目的groupId。
- ${project.artifactId}:项目的artifactId。
- ${project.version}:项目的version,与${version}等价。
- ${project.build.finalName}:项目打包输出文件的名称,默认为${project.artifactId}${project.version}。
###管理多环境的配置文件
- pom根节点下配置profile
dev true dev prd prd
- 开启资源过滤
${project.name} src/main/resources/config/${env}.properties src/main/resources config/** true