1.1Maven座標
座標:每個jar包或maven項目在網絡上都有一個獨一無二的身份證java
座標(GAV)web
- groupId 公司或組織域名的倒序(倉庫:包名)
- artifactId 項目名或模塊名(倉庫:項目名)
- version 版本號(倉庫:版本號)
座標和本地倉庫有關係麼?apache
- 有關係的。
- 路徑:/倉庫名/groupid名/artifactid名/version/
1.2 Maven常見命令
- compile:編譯。 把項目中的Java文件編譯爲class文件,生成target目錄
- clean:清除。 刪除target目錄
- package:打包。把target目錄中的內容,打包成jar或war
- install:安裝。 把生成的jar包或war包安裝到本地倉庫
- 全部本地項目均可以共享該項目的方法和類
1.3 POM 標籤詳解網絡
<!-- project標籤:父標籤 ,將來pom中全部的內容都要放在project標籤裏面-->dom
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"maven
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">ui
<!-- 版本號 -->編碼
<modelVersion>4.0.0</modelVersion>url
<!-- spa
groupId+artifactId+version:全球惟一,座標,簡稱GAV
-->
<!-- 組id:包名 -->
<groupId>com.czxy</groupId>
<!-- 項目名,藝術品的名字 -->
<artifactId>maven01</artifactId>
<!-- 版本號,當前項目的版本號 -->
<version>0.0.1-SNAPSHOT</version>
<!-- 打包方式
jar:javaSE項目
war:javaEE項目(WEB項目)
pom:父項目(多模塊再講解)-->
<packaging>jar</packaging>
<!-- name和url:非必須,任意賦值 -->
<name>mavendemo01</name>
<url>http://maven.apache.org</url>
<!-- properties:屬性,裏面能夠配置好多好多屬性,這個標籤不是必須的 -->
<properties>
<!-- 默認配置了編碼 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<hehe.version>5.1</hehe.version>
</properties>
<!-- dependencies:複數,裏面能夠放置多個 -->
<dependencies>
<!-- dependency:單數,具體的jar包 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${hehe.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<!-- plugins:插件-->
<plugins>
<!-- plugin:具體的插件 -->
<plugin>
<!-- 統一jdk版本的插件,強制要求添加 -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<target>1.8</target>
<source>1.8</source>
</configuration>
</plugin>
</plugins>
</build>
</project>
1.4 爲POM添加自定義依賴
- 本地倉庫:(斷網正常使用)
- 網絡:
本地倉導入:適用於知道項目名/jar包名/jar包下某個類名,jar包必須存在於本地倉庫
網絡導入:適用於jar包沒在本地倉庫
1.5 依賴範圍
- 不一樣jar包有本身的做用範圍,爲了更加精準地使用jar包。
- 依賴範圍:jar包做用範圍
2. 依賴衝突
2.1依賴關係&依賴衝突
未來項目中會由於相同jar包的不一樣版本致使項目崩潰。
- Maven項目中的jar包依賴關係:
直接依賴:A依賴B
項目A,直接導入了jar包B
- 間接依賴(傳遞性依賴):A依賴B,B依賴C,A間接依賴C
項目A,直接導入了jar包B,jar包B依賴jar包C,項目A間接依賴jar包C
依賴衝突問題,由間接依賴致使:
- 項目A直接導入了jar包B和jar包C
- Jar包B 依賴了 jar包D 1.1版本
- Jar包C 依賴了 jar包D 2.1版本
2.2 依賴衝突的調解原則:路徑近者優先
路徑最近的 直接依賴
2.3 依賴衝突的調解原則: 第一聲明優先
- 哪一個間接依賴先聲明,就按誰的版本導入
2.4 依賴衝突解決方案:直接排除法
建議排除葉子節點,不然容易引發連鎖反應
3.1 工程分層
Dao domain service web utils commons 子項目
3.2 聚合(多模塊)和繼承
- 繼承:maven項目中,子項目能夠繼承父項目的依賴和插件等配置。
- 聚合:多個maven子項目能夠組成一個完整的項目,這就是聚合
- 繼承:子工程繼承父工程 依賴和插件
- 聚合:子工程之間相互依賴,造成一個總體,總體就是一個聚合工程聚合和繼承一般一塊兒使用