1、什麼是Maven?html
Maven是一款軟件項目管理和理解工具。基於項目對象模型(POM)的概念,經過添加一小段描述來管理項目的構建。java
2、爲何要使用Maven?web
之前在用Java開發一個項目時,每每須要引入幾十或者上百個Jar包,那麼這些Jar可能分散在不一樣的地址,咱們須要一個一個去下載,而後在導入到咱們項目中!有時一個Jar包找到合適的版本可能須要幾個小時。更讓人痛苦的是一個大項目開發須要多人協同開發。那麼項目依賴的Jar包就須要有一份公共的來解決不一樣人引入相同的Jar不一樣版本的依賴從而致使衝突。spring
如今使用Maven來構建,Maven經過一個POM文件來管理項目依賴,只要在POM中加入想要的Jar包依賴,Maven會在本地倉庫中查找依賴包。若是本地沒有找到就會從配置的私服中下載依賴,沒有配置私服Maven就會從Maven的中央倉庫(99%的開源項目均可以在Maven中央倉庫中找到)中去找到指定版本的Jar包。apache
3、約定規範網絡
web : 項目名稱app
src : 源代碼和測試代碼的根目錄框架
main : 應用代碼目錄webapp
java : 源代碼目錄maven
resources : 配置文件目錄
test : 測試代碼目錄
testResources : 測試使用的配置文件
webapp : 當你的項目是一個web項目時纔會須要這個文件夾,裏面都是存放項目靜態文件。若是你的項目是jar項目那就不須要這個目錄了。
target : 項目打包時maven自動幫咱們建立的目錄,裏面就是打包好的項目文件
pom.xml : 這就是配置項目依賴的地方。一次配置,無論之後代碼給誰,均可以運行起來。
4、實例
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.test</groupId> <artifactId>maven-test</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>maven-test Maven Webapp</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> /** * POM文件中使用的變量聲明 * 能夠在這裏聲明各類文件的版本號 * 例如 : <spring.version>4.3.9.RELEASE</spring.version> * 在下面的依賴引入時能夠聲明一個公共版本 */ <spring.version>4.3.9.RELEASE</spring.version> </properties> <dependencies> /** * 一個 dependency 爲一個依賴 * groupId : 項目組織惟一的標識符,對應JAVA的包的結構,在main目錄裏面java的目錄結構 (groupId能夠多個項目使用一個) * artifactId : 項目的惟一的標識符,實際對應項目的名稱,就是項目根目錄的名稱。(每一個項目中一樣的版本只能有一個) */ <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> </dependencies> <build> <finalName>maven-test</finalName> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> /** * 這邊是maven插件配置 * 須要打包jar時,就須要配置mainClass * 多模塊時,須要配置子模塊文件引入插件 */ <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.0.0</version> </plugin> <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.20.1</version> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.0</version> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> </plugin> </plugins> </pluginManagement> </build> </project>
5、模塊化項目管理
Maven模塊化項目管理,適用於一些比較大的項目,經過功能的模塊拆分,實現代碼的解耦合,便於代碼的複用和維護及管理。開源框架在便於閱讀源碼前提下基本都是採用模塊化的方式,提供模塊集成,用戶能夠根據需求配置指定的模塊。
父模塊配置:
子模塊配置:
父模塊配置dependencies與dependencyManagement的區別 :
dependencies : 在子模塊中不寫該依賴項,那麼子模塊仍然會從父模塊中繼承該依賴項(所有繼承,上面使用的截圖就是dependencies)
dependencyManagement : 父模塊裏只是聲明依賴(在dependencies外層在包一個dependencyManagement標籤說明),並不實現引入,所以子模塊須要顯示的聲明須要用的依賴。若是不在子模塊中聲明依賴,是不會從父模塊中繼承下來的;只有在子模塊中寫了該依賴項,而且沒有指定具體版本,纔會從父模塊中繼承該項,而且version和scope都讀取自父pom。另外若是子模塊中指定了版本號,那麼會使用子模塊中指定的Jar版本。
部分信息參考來自網絡.