1.maven入門

一、MAVEN能做什么?

  1. 清理項(xiàng)目 mvn clean
  2. 編譯項(xiàng)目 mvn compiler
  3. 測(cè)試項(xiàng)目 mvn test
  4. 生成測(cè)試報(bào)告
  5. 打包項(xiàng)目 mvn package
  6. 部署項(xiàng)目

二、安裝maven

  1. 下載maven,解壓至/Users/QQ960911789
  2. 配置環(huán)境變量
export M2_HOME=/Users/QQ960911789/apache-maven-3.5.0
export PATH=$PATH:$M2_HOME/bin

三、MAVEN項(xiàng)目結(jié)構(gòu)

src
--main
----java ——存放項(xiàng)目的.java文件
----resources ——存放項(xiàng)目資源文件,如spring
--test
----java ——存放所有測(cè)試.java文件,如JUnit測(cè)試類
----resources ——存放項(xiàng)目資源文件,如spring
target ——項(xiàng)目輸出位置
pom.xml ——用于標(biāo)識(shí)該項(xiàng)目是一個(gè)Maven項(xiàng)目


四、Pom.xml配置

<?xml version="1.0"?>
<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.foxconn.zqq</groupId>
 <artifactId>testMaven</artifactId>
 <version>SNAPSHOT-1.0.0</version> 
</project>

POM是項(xiàng)目對(duì)象模型(Project Object Model)的簡(jiǎn)稱,它是Maven項(xiàng)目中的文件,使用XML表示,名稱叫做pom.xml。在Maven世界中,project可以什么都沒(méi)有,甚至沒(méi)有代碼,但是必須包含pom.xml文件。

五、創(chuàng)建項(xiàng)目如下

testMaven
pom.xml
mkdir命令 創(chuàng)建文件夾
touch命令 創(chuàng)建文件


運(yùn)行 mvn clean
運(yùn)行 mvn package


groupId:定義maven的項(xiàng)目,可以用包名
artifactId:定義項(xiàng)目中的一個(gè)模塊,一般都是工程名
version:版本
packaging:定義打包方式
坐標(biāo)的作用:
用來(lái)唯一標(biāo)識(shí)一個(gè)構(gòu)件,在依賴?yán)锩娓鶕?jù)坐標(biāo)來(lái)找需要的構(gòu)件。

六、引入junit并測(cè)試

切換到IDEA工具下開發(fā)該項(xiàng)目
pom.xml,編寫后IDEA有提示是否默認(rèn)導(dǎo)入maven包,選擇即可

<?xml version="1.0"?>
<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.foxconn.zqq</groupId>    
<artifactId>testMaven</artifactId>   
<version>SNAPSHOT-1.0.0</version>    
 
<dependencies>      
  <dependency>         
     <groupId>junit</groupId>         
     <artifactId>junit</artifactId>   
     <version>4.11</version>  
  </dependency>    
</dependencies>
</project>

創(chuàng)建類時(shí),應(yīng)注意創(chuàng)建在src/test文件夾下以Test為結(jié)尾的類,與surefire測(cè)試插件有關(guān),如果創(chuàng)建不滿足規(guī)則的測(cè)試類,則不會(huì)運(yùn)行帶有@Test的方法;如果編寫類時(shí),引入@Test注解報(bào)錯(cuò):Annotation not allowed here,刪除該類再創(chuàng)建即可

package com.foxconn.zqq;
import org.junit.Test;
public class HelloTest {    
  @Test    
  public void test(){        
    System.out.println("hello test");   
   }
}
import org.junit.Test;
public class MyTest {    
  @Test    
  public void test(){       
   System.out.println("MyTest m test method running");    
  }   
  @Test   
  public void test2(){        
    System.out.println("test2 a a a ");    
  }
}

View-Tool Windows-Terminal或者Alt+F12 ,mvn test,測(cè)試src/test下的測(cè)試類


執(zhí)行mvn 測(cè)試命令

七、Maven單元測(cè)試

1.maven-surefire-plugin簡(jiǎn)介
Maven本身并不是一個(gè)單元測(cè)試框架,它只是在構(gòu)建執(zhí)行到特定生命周期階段的時(shí)候,通過(guò)插件來(lái)執(zhí)行JUnit或者TestNG的測(cè)試用例。這個(gè)插件就是maven-surefire-plugin,也可以稱為測(cè)試運(yùn)行器(Test Runner),它能兼容JUnit 3、JUnit 4以及TestNG。
在默認(rèn)情況下,maven-surefire-plugin的test目標(biāo)會(huì)自動(dòng)執(zhí)行測(cè)試源碼路徑(默認(rèn)為src/test/java/)下所有符合一組命名模式的測(cè)試類。這組模式為:
*/Test.java:任何子目錄下所有命名以Test開關(guān)的Java類。
*/Test.java:任何子目錄下所有命名以Test結(jié)尾的Java類。
*/TestCase.java:任何子目錄下所有命名以TestCase結(jié)尾的Java類。
2.跳過(guò)測(cè)試
打包時(shí)經(jīng)常不需要測(cè)試,需要跳過(guò)test,因?yàn)閠est中都是對(duì)接口的單元測(cè)試,如果測(cè)試不通過(guò),則不能正常打包;
測(cè)試中的方法會(huì)執(zhí)行,速度慢
①mvn package -Dmaven.test.skip=true


測(cè)試報(bào)告:

②pom.xml中配置跳過(guò)測(cè)試

<?xml version="1.0"?>
<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.foxconn.zqq</groupId>   
<artifactId>testMaven</artifactId>    
<version>SNAPSHOT-1.0.0</version>   

<dependencies>      
  <dependency>        
    <groupId>junit</groupId>          
    <artifactId>junit</artifactId>       
    <version>4.11</version>     
   </dependency>    
</dependencies>     
<build>     
   <!--修改生成的jar/war的名稱-->   
     <finalName>testMaven-1.0</finalName>    
     <plugins>    
        <plugin>        
          <groupId>org.apache.maven.plugins</groupId>    
          <artifactId>maven-surefire-plugin</artifactId>     
          <version>2.5</version> 
          <configuration>              
             <skipTests>true</skipTests>   
           </configuration>          
  </plugin>      
  </plugins>  
  </build>
</project>

可以看到,運(yùn)行mvn package時(shí),已跳過(guò)測(cè)試


3.動(dòng)態(tài)指定要運(yùn)行的測(cè)試用例
maven-surefire-plugin提供了一個(gè)test參數(shù)讓Maven用戶能夠在命令行指定要運(yùn)行的測(cè)試用例。如:
mvn test -Dtest=RandomGeneratorTest
也可以使用通配符:
mvn test -Dtest=RandomTest
或者也可以使用“,”號(hào)指定多個(gè)測(cè)試類:
mvn test -Dtest=Random
Test,AccountCaptchaServiceTest
4.包含與排除測(cè)試用例

<plugin>  
    <groupId>org.apache.maven.plugins</groupId>  
    <artifactId>maven-surefire-plugin</artifactId>  
    <version>2.5</version>  
    <configuration>  
        <includes>  
            <include>**/*Tests.java</include>  
        </includes>  
        <excludes>  
            <exclude>**/*ServiceTest.java</exclude>  
            <exclude>**/TempDaoTest.java</exclude>  
        </excludes>  
    </configuration>  
</plugin>  

5.生成測(cè)試報(bào)告
5.1基本測(cè)試報(bào)告
默認(rèn)情況下,maven-surefire-plugin會(huì)在項(xiàng)目的target/surefire-reports目錄下生成兩種格式的錯(cuò)誤報(bào)告。
簡(jiǎn)單文本格式——內(nèi)容十分簡(jiǎn)單,可以看出哪個(gè)測(cè)試項(xiàng)出錯(cuò)。
與JUnit兼容的XML格式——XML格式已經(jīng)成為了Java單元測(cè)試報(bào)告的事實(shí)標(biāo)準(zhǔn),這個(gè)文件可以用其他的工具如IDE來(lái)查看。

八、mvn package

打包時(shí),執(zhí)行mvn package(默認(rèn)也會(huì)執(zhí)行src/test文件夾下的test方法)


打包位置:默認(rèn)生成jar包(在pom.xml的packaging配置),位置如下

九、maven插件

maven的命令及相關(guān)骨架都是插件

十、maven概念模型


依賴管理模型
Maven倉(cāng)庫(kù)布局
1、本地倉(cāng)庫(kù)
默認(rèn)情況下,不管是在windows還是linux上,每個(gè)用戶在自己的用戶目錄下都有一個(gè)路徑名為.m2/repository/的倉(cāng)庫(kù)目錄。有時(shí)候,因?yàn)槟承┰?例如C盤空間不夠),用戶會(huì)想要自定義本地倉(cāng)庫(kù)目錄地址。這時(shí),可以拷貝apache-maven-3.5.0中的settings.xml文件拷貝至~/.m2/settings.xml,然后編輯,設(shè)置localRepository元素的值為想要的倉(cāng)庫(kù)地址。例如:

<settings>  
    <localRepository>D:\java\repository\</localRepository>  
</settings> 

2、遠(yuǎn)程倉(cāng)庫(kù)
安裝好Maven后,如果不執(zhí)行任何Maven命令,本地倉(cāng)庫(kù)目錄是不存在的。當(dāng)用戶輸入第一條Maven命令之后,Maven才會(huì)創(chuàng)建本地倉(cāng)庫(kù),然后根據(jù)配置和需要,從遠(yuǎn)程倉(cāng)庫(kù)下載構(gòu)件至本地倉(cāng)庫(kù)。
3、中央倉(cāng)庫(kù)(位置在美國(guó))
可以使用解壓工具打開jar文件$M2_HOME/lib/maven-model-builder-3.0.jar,里面可以看到pom.xml中的中央倉(cāng)庫(kù)配置
4、私服
私服是一種特殊的遠(yuǎn)程倉(cāng)庫(kù),它是架設(shè)在局域網(wǎng)內(nèi)的倉(cāng)庫(kù)服務(wù),私服代理廣域網(wǎng)上的遠(yuǎn)程倉(cāng)庫(kù),供局域網(wǎng)內(nèi)的Maven用戶使用。當(dāng)Maven需要下載構(gòu)件的時(shí)候,它從私服請(qǐng)求,如果私服上不存在該構(gòu)件,則從外部的遠(yuǎn)程倉(cāng)庫(kù)下載,緩存在私服上之后,再為Maven的下載請(qǐng)求提供服務(wù)。此外,一些無(wú)法從外部倉(cāng)庫(kù)下載到的構(gòu)件也能從本地上傳到私服上供大家使用。

3.中央倉(cāng)庫(kù):
apache-maven-3.5.0/lib


最頂層pom文件:modelVersion、中央倉(cāng)庫(kù)位置、插件中央倉(cāng)庫(kù)位置、相應(yīng)的target等位置定義
本地倉(cāng)庫(kù):~/.m2/repository
本地插件倉(cāng)庫(kù):命令行使用的命令依賴于該插件庫(kù)

用jd-gui反編譯工具或者360解壓工具查看
如下,定義了modelVersion版本4.0.0,同理項(xiàng)目中也應(yīng)與此保持一致;
定義了中央倉(cāng)庫(kù),插件倉(cāng)庫(kù),maven目錄結(jié)構(gòu)

十一、dependency依賴中scope范圍

1、compile
默認(rèn)編譯依賴范圍。對(duì)于編譯,測(cè)試,運(yùn)行三種classpath都有效
2、test
測(cè)試依賴范圍。只對(duì)于測(cè)試classpath有效,只對(duì)測(cè)試代碼有效
3、provided
已提供依賴范圍。對(duì)于編譯,測(cè)試的classpath都有效,但對(duì)于運(yùn)行無(wú)效。因?yàn)橛扇萜饕呀?jīng)提供,例如servlet-api,打包的時(shí)候這個(gè)包不會(huì)打進(jìn)去
4、runtime
運(yùn)行時(shí)提供。例如:jdbc驅(qū)動(dòng)
Compile、runtime打包會(huì)打進(jìn)去,test、provided打包不會(huì)打進(jìn)去
5、傳遞性依賴原則
1.路徑最近者優(yōu)先 C?B?A,C依賴B,B依賴A,會(huì)先用B的jar包
例:C的pom.xml依賴B,B的pom.xml依賴A
B中junit-4.10,A中junit-4.11,就近原則,C中引用junit-4.11
2.路徑相同,第一聲明者優(yōu)先:C?B,C?A,必須看B,A在C中哪一個(gè)先聲明
例:C的pom.xml依賴B,C的pom.xml依賴A
B中junit-4.10,A中junit-4.11,就近原則,
C中先引用B,C中引用junit-4.10
C中先引用A,C中引用junit-4.11

同一個(gè)工程中的模塊可以相互依賴,idea中是project的概念,如果通過(guò)maven依賴,需要先在本project中查找,而后在本地倉(cāng)庫(kù),鏡像,中央倉(cāng)庫(kù)查找,
1.如果是本地2個(gè)不同的project,則需要通過(guò)mvn install,上傳至本地倉(cāng)庫(kù)
2.在1個(gè)project中建立不同的module,可以配置依賴
1.project:test1710/project:test171002
test171002



test1710:



2.project下不同的module
project:test02 module:test02A/module:test02B/module:test02C

test02A

<groupId>com.foxconn.zqq</groupId>
<artifactId>test02A</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

<dependencies>  
     <dependency>    
          <groupId>junit</groupId>    
          <artifactId>junit</artifactId>    
          <version>4.11</version>  
     </dependency>
</dependencies>

test02B

<groupId>com.foxconn.zqq</groupId>
<artifactId>test02B</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

<dependencies>  
    <dependency>    
        <groupId>junit</groupId>    
        <artifactId>junit</artifactId>    
        <version>3.8.1</version>  
        </dependency>
</dependencies>

test02C

<groupId>com.foxconn.zqq</groupId>
<artifactId>test02C</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

<dependencies>  
     <dependency>    
          <groupId>com.foxconn.zqq</groupId>    
          <artifactId>test02A</artifactId>    
          <version>1.0-SNAPSHOT</version>  
    </dependency>  
    <dependency>    
          <groupId>com.foxconn.zqq</groupId>    
          <artifactId>test02B</artifactId>    
          <version>1.0-SNAPSHOT</version>  
  </dependency>
</dependencies>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、安裝 首先maven的配置安裝非常簡(jiǎn)單:將下載下來(lái)的壓縮包解壓之后將bin目錄的路徑加入到path環(huán)境變量下即...
    yjaal閱讀 1,173評(píng)論 1 8
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,562評(píng)論 19 139
  • 1.編寫POM Maven項(xiàng)目的核心文件是pom.xml,POM(Project Objcet Model)項(xiàng)目對(duì)...
    zlcook閱讀 6,006評(píng)論 7 26
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,273評(píng)論 6 342
  • 微笑的靈魂閱讀 195評(píng)論 0 0

友情鏈接更多精彩內(nèi)容