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>
相關文章
相關標籤/搜索