maven基本要点

###环境变量MAVEN_OPTSjava

  • -Xms128m -Xmx512m

###依赖范围 依赖范围就是用来控制依赖与这三种class-path(编译classpath、测试classpath、运行class-path)的关系。api

  • 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不一样的两个依赖。根据依赖调节两大原则,最后只能有一个版本。

###依赖优化的命令maven

  • mvn dependency:list
  • mvn dependency:tree
  • mvn dependency:analyze
  • duplicate-finder-maven-plugin

###快照版本的使用ide

  • 开发联调时使用快照版本如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-一、3.0-alpha-二、3.0-beta-1等。这样的版本与正式的3.0相比,每每表示不是很是稳定,还须要不少测试。

###常见pom属性ui

  • ${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}。

###管理多环境的配置文件spa

  • pom根节点下配置profile
<profiles>
		<profile>
			<id>dev</id>
			<activation>
				<activeByDefault>true</activeByDefault>
			</activation>
			<properties>
				<!-- mvn clean package –Pdev  -->
				<env>dev</env>
			</properties>
		</profile>
		<profile>
			<id>prd</id>
			<properties>
				<!-- mvn clean package –Pprd -->
				<env>prd</env>
			</properties>
		</profile>
	</profiles>
  • 开启资源过滤
<build>
		<finalName>${project.name}</finalName>
		<!--打包时根据参数,选择配置文件-->
		<filters>
			<filter>src/main/resources/config/${env}.properties</filter>
		</filters>
		<resources>
			<!--启用maven的profile,对资源文件进行过滤 profiles.active-->
			<resource>
				<directory>src/main/resources</directory>
				<excludes>
					<!--config的文件仅仅作打包用,打包时maven会扫描配置目录下的文件,并将filter指定的文件的参数替换进去-->
					<exclude>config/**</exclude>
				</excludes>
				<filtering>true</filtering>
			</resource>
		</resources>
	</build>
相关文章
相关标签/搜索