Maven的使用(依賴衝突)

1.1Maven座標

座標:每個jar包或maven項目在網絡上都有一個獨一無二的身份證java

座標(GAVweb

  1. groupId 公司或組織域名的倒序(倉庫:包名)
  2. artifactId 項目名或模塊名(倉庫:項目名)
  3. version 版本號(倉庫:版本號)

座標和本地倉庫有關係麼?apache

  • 有關係的。
  • 路徑:/倉庫名/groupid/artifactid/version/

1.2 Maven常見命令

  • compile:編譯。 把項目中的Java文件編譯爲class文件,生成target目錄
  • clean:清除。   刪除target目錄
  • package:打包。把target目錄中的內容,打包成jarwar
  • 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>

  <!-- 打包方式  

jarjavaSE項目

war:javaEE項目(WEB項目)

pom:父項目(多模塊再講解)-->

  <packaging>jar</packaging>

  <!-- nameurl:非必須,任意賦值 -->   

  <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添加自定義依賴

  • 本地倉庫:(斷網正常使用)

 

  1. 網絡:

 http://www.mvnrepository.com/

本地倉導入:適用於知道項目名/jar包名/jar包下某個類名,jar包必須存在於本地倉庫

網絡導入:適用於jar包沒在本地倉庫

1.5 ​​​​​​​依賴範圍

  • 不一樣jar包有本身的做用範圍,爲了更加精準地使用jar包。
  • 依賴範圍:jar包做用範圍

2. 依賴衝突

​​​​​​​2.1依賴關係&依賴衝突

未來項目中會由於相同jar包的不一樣版本致使項目崩潰。

  • Maven項目中的jar包依賴關係:

直接依賴A依賴B

項目A,直接導入了jarB

  •  間接依賴(傳遞性依賴)A依賴BB依賴CA間接依賴C

項目A,直接導入了jarBjarB依賴jarC,項目A間接依賴jarC

依賴衝突問題,由間接依賴致使:

  •        項目A直接導入了jarBjarC
  •        JarB 依賴了 jarD 1.1版本
  •        JarC 依賴了 jarD 2.1版本

​​​​​​​2.2 依賴衝突的調解原則:路徑近者優先

  路徑最近的 直接依賴

​​​​​​​2.3 依賴衝突的調解原則: 第一聲明優先

  • 哪一個間接依賴先聲明,就按誰的版本導入

​​​​​​​2.4 依賴衝突解決方案:直接排除法

建議排除葉子節點,不然容易引發連鎖反應

​​​​​​​3.1 工程分層

Dao  domain   service   web    utils     commons 子項目

​​​​​​​3.2 聚合(多模塊)和繼承

  • 繼承:maven項目中,子項目能夠繼承父項目的依賴和插件等配置。
  • 聚合:多個maven子項目能夠組成一個完整的項目,這就是聚合

  • 繼承:子工程繼承父工程 依賴和插件
  • 聚合:子工程之間相互依賴,造成一個總體,總體就是一個聚合工程聚合和繼承一般一塊兒使用​​​​​​​
相關文章
相關標籤/搜索