Maven的基本使用

Maven的基本了解

什么是Maven?

Maven就是Apache下的一個(gè)開源項(xiàng)目。它是用純java開發(fā)的。是一個(gè)項(xiàng)目管理工具。使用Maven對java項(xiàng)目進(jìn)行構(gòu)建、依賴管理。

項(xiàng)目構(gòu)建:
項(xiàng)目構(gòu)建包括代碼編寫、編譯、測試、運(yùn)行、打包、部署和運(yùn)行這幾個(gè)過程。傳統(tǒng)的項(xiàng)目構(gòu)建需要導(dǎo)入jar包來管理。對于Maven來說,是通過pom.xml配置文件來配置所需要的依賴。

依賴管理:
一個(gè)java項(xiàng)目可能要使用一些第三方j(luò)ar包才可以運(yùn)行,那么我們的jar包依賴于第三方的jar包。所謂的依賴管理就是對項(xiàng)目所有依賴的jar包進(jìn)行規(guī)范化管理。

Maven的好處

  • Maven的項(xiàng)目體積?。w現(xiàn)在,jar包都不會保存在項(xiàng)目中,而是通過pom配置文件查詢本地倉庫中的jar包)
  • 可以一鍵構(gòu)建項(xiàng)目

注意:jar包雖然是保存在本地倉庫中,但是并不會影響項(xiàng)目的打包

Maven的安裝和環(huán)境變量的配置

Maven下載地址:maven官網(wǎng)
直接解壓在本地中即可

1、MAVEN_HOME的配置
例如我的安裝目錄是:M:\SOFTWART\apache-maven-3.5.2
因?yàn)槲曳奖阋苿?dòng),設(shè)置的是臨時(shí)變量。建議在用戶的全局變量中設(shè)置。

set path=M:\SOFTWART\apache-maven-3.5.2

2、配置本地倉庫 - 也就是配置主鍵的存放位置,主鍵可以理解為依賴包
兩種方式:

  • 用戶settings.xml配置文件中設(shè)置(用戶目錄/.m2中配置)
  • 全局settings.xml配置文件中設(shè)置(Maven目錄/conf/setting.xml中配置)

建議采用第一種方式,好處是:第一種方式對其他用戶不影響,而且在Maven升級的時(shí)候需用修改用戶配置文件,而全局配置文件卻要修改。

找到settings根標(biāo)簽,寫上關(guān)聯(lián)的本地倉庫位置

<localRepository>M:\DOCMENT\repository</localRepository>

Maven命令和生命周期

Maven的命令操作

clean:清理編譯的文件
compile:編譯主目錄代碼
test:編譯測試代碼,并運(yùn)行代碼
package:打包(打包的文件名和類型取決于pom.xml)
install:就是把項(xiàng)目打包到本地倉庫目錄
tomcat:run: 一鍵啟動(dòng),Maven中tomcat默認(rèn)版本是6,如果要使用其他版本(如:tomcat7:run)

Maven的生命周期

生命周期:為了對所有構(gòu)件過程進(jìn)行抽象和統(tǒng)一。
這個(gè)生命周期包含了幾個(gè)過程:清理、初始化、編譯、測試、打包、集成測試、驗(yàn)證、部署、站點(diǎn)生成

Maven擁有三套相互獨(dú)立的生命周期:clean生命周期、default生命周期和site生命周期

clean生命周期

clean生命周期的目的是清理項(xiàng)目
包含三個(gè)階段:
-per-clean:執(zhí)行一些清理前需要完成的工作

  • clean:清理上一次構(gòu)建生成的文件
  • post-clean:執(zhí)行一些清理后需要完成的工作。

default生命周期

default生命周期的目的是構(gòu)建項(xiàng)目
核心階段:(略過其他的)

  • process-source:處理項(xiàng)目主資源文件。對src/main/resources目錄的內(nèi)容進(jìn)行變量替換等工作后,復(fù)制到項(xiàng)目輸出的主classpath目錄中。
  • compile:編譯項(xiàng)目的主源碼,編譯src/main/java目錄下的java文件至classpath目錄中。
  • process-test-source:處理項(xiàng)目測試資源文件。對src/test/resources目錄的內(nèi)容進(jìn)行變量替換等工作后,復(fù)制到項(xiàng)目輸出的主classpath目錄中。
  • test-compile:編譯項(xiàng)目的測試代碼,編譯src/test/java目錄下的java文件至classpath目錄中。
  • test:使用單元測試框架進(jìn)行運(yùn)行測試,測試代碼不會被打包或部署
  • package:接收編譯好的代碼,打包成可發(fā)布的格式,如jar
  • install:將包安裝到Maven本地倉庫,供本地其他Maven項(xiàng)目使用
  • deploy:將最終的包復(fù)制到遠(yuǎn)程倉庫,供其他開發(fā)人員和Maven項(xiàng)目使用

常見的打包方式:jar、war、pom、maven-plugin、ear

site生命周期

site生命周期的目的是建立項(xiàng)目站點(diǎn)

  • pre-site:執(zhí)行一些在生成項(xiàng)目站點(diǎn)之前需要完成的工作
  • site:生成項(xiàng)目站點(diǎn)文檔
  • post-site:執(zhí)行一些在生成項(xiàng)目站點(diǎn)之后需要完成的工作
  • site-deploy:將生成的項(xiàng)目站點(diǎn)發(fā)布到服務(wù)器上。

不同的生命周期可以同時(shí)使用:

mvn clean install
mvn clean deploy site

mvn clean deploy site命令的執(zhí)行階段:執(zhí)行clean生命周期的clean階段(包括per-clean、clean)、default生命周期的deploy階段(包含default生周期的全部階段)以及site生命周期的site-deploy階段(site生命周期的全部階段)

Maven倉庫

如果用過git的朋友應(yīng)該知道,有本地的git倉庫,也有遠(yuǎn)程的git倉庫。對于Maven也是一樣的。

構(gòu)件

構(gòu)件:任何一個(gè)依賴、插件或者 項(xiàng)目構(gòu)建的輸出(項(xiàng)目打包后輸出的文件)都可以稱為構(gòu)件
任何一個(gè)構(gòu)件都有一組坐標(biāo)唯一標(biāo)識。

構(gòu)件在項(xiàng)目中的應(yīng)用

了解Maven中處理倉庫布局的源碼,來了解Maven是如何通過坐標(biāo)來表示倉庫的路徑
說明:
倉庫路勁為:log4j/log4j/1.2.15/log4j-1.2.15.jar (groupId/artifactId/version/artifactId-version.packageing)
坐標(biāo) =>
groupId=log4j
artifactId=log4j
version=1.2.15
packageing=jar

源碼解析:

private static final char PATH_SEPARATOR = '/';
private static final char GROUP_SEPARATOR = '.';
private static final char ARTIFACT_SEPARATOR = '-';
public String pathOf(Artifact artifact) {
     
     ArtifactHandler artifactHandler = artifact.getArtifactHandler();
     StringBuilder path = new StringBuilder(128);
     
     path.append(formatAsDiretory(artifact.getGroupId())).append(PATH_SEPARATOR);
     path.append(artifact.getArtifactId()).append(PATH_SEPARATOR);
     path.append(artifact.getBaseVersion()).append(PATH_SEPARATOR);
     path.append(artifact.getArtifactId()).append(ARTIFACT_SEPARATOR).append(artifact.getVersion());
     if (artifact.hasClassifier()) {
          path.append(ARTIFACT_SEPARATOR).append(artifact.getClassifier());
     }
     if (artifactHandler.getExtension() != null && artifactHandler.getExtension().length() >0 ) {
          path.append(GROUP_SEPARATOR).append(artifactHandler.getExtension());
     }
     return path.toString();
}
private String formatAsDiretory (String directory) {
     return directory.replace(GROUP_SEPARATOR, PATH_SEPARATOR);
}

=> artifact.getBaseVersion()主要是為SNAPSHOP版本服務(wù)的,例如version為1.0-SNAPSHOP的構(gòu)件,其baseVersion就是1.0
=> classifier表示的是構(gòu)建輸出的一些附屬構(gòu)建,例如:javadoc、source

Maven倉庫種類

Maven倉庫分為三種:

  • 本地倉庫(自己維護(hù))
  • 遠(yuǎn)程倉庫
    • 私服(公司維護(hù))
    • 中央倉庫(Maven團(tuán)隊(duì)維護(hù))
    • 其他公共庫(其他人維護(hù))

常見的遠(yuǎn)程倉庫有:
JBoss Maven庫

添加中央倉庫鏡像 -- 阿里云鏡像
1、在settings.xml中配置

<mirror>
  <id>nexus-aliyun</id>
  <mirrorOf>*</mirrorOf>
  <name>Nexus aliyun</name>
  <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

2、在pom.xml中配置

<repositories>  
    <repository>  
        <id>maven-ali</id>  
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url
>        <releases>  
            <enabled>true</enabled>  
        </releases>  
        <snapshots>  
            <enabled>false</enabled>  
            <updatePolicy>always</updatePolicy>  
            <checksumPolicy>fail</checksumPolicy>  
        </snapshots>  
    </repository>  
</repositories>

updatePolicy表示用來配置Maven從遠(yuǎn)程倉庫檢查更新的頻率,默認(rèn)值是daily

  • never:從不檢查更新
  • always:每次構(gòu)建都檢查更新
  • interval:X :每隔X分鐘檢查一次更新
  • daily:每天檢查一次
    checksumPolicy:用來配置Maven檢查檢驗(yàn)和文件的策略,當(dāng)構(gòu)建部署到Maven倉庫的時(shí)候,會同時(shí)部署對應(yīng)的校驗(yàn)和文件。
  • fail:Maven遇到檢驗(yàn)和錯(cuò)誤就讓構(gòu)建失敗
  • ignore:使Maven完全忽略校驗(yàn)和錯(cuò)誤

私服

代表軟件:Nexus
使用私服的好處:

  • 節(jié)省字節(jié)的外網(wǎng)帶寬
  • 加速M(fèi)aven構(gòu)建
  • 部署第三方構(gòu)件
  • 提高穩(wěn)定性,增強(qiáng)控制(不會受網(wǎng)絡(luò)的影響、權(quán)限管理、RELEASE和SNAPSHOT區(qū)分等)
  • 降低中央倉庫的負(fù)荷

配置私服鏡像:

<mirror>  
  <id>mymaven</id>  
  <name>nexus respository</name>
  <url>http://localhost:8081/nexus/content/groups/public/</url>
  <mirrorOf>*</mirrorOf>          
</mirror>

mirrorOf

  • *:匹配所有遠(yuǎn)程倉庫
  • external: *:匹配所有遠(yuǎn)程倉庫,使用localhost的除外,使用file://協(xié)議的除外。也就是說匹配所有不在本機(jī)上的遠(yuǎn)程倉庫
  • repo1、repo2:匹配倉庫repo1和repo2,使用, 來分割多個(gè)遠(yuǎn)程倉庫
  • *,!repo1:匹配所有的遠(yuǎn)程倉庫,repo1除外

遠(yuǎn)程倉庫的驗(yàn)證以及部署配置

以私服來配置:

倉庫驗(yàn)證

<server>
  <id>releases</id>
  <username>admin</username>
  <password>admin123</password>
</server>
<server>
  <id>snapshots</id>
  <username>admin</username>
  <password>admin123</password>
</server>

部署到遠(yuǎn)程倉庫配置

<distributionManagement>
    <repository>
        <id>releases</id>
              <url>http://localhost:8081/nexus/content/repositories/releases/</url>
    </repository>
    <snapshotRepository>
        <id>snapshots</id>
        <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
    </snapshotRepository>
</distributionManagement>

distributionManagement包含repository和snapshotRepository

  • repository:發(fā)布版本構(gòu)建的倉庫
  • snapshotRepository:快照保本的倉庫

詳解pom.xml

了解版本 -- REALISE、SNAPSHOT

REALISE版本

REALISE版本是用來表示一個(gè)穩(wěn)定的版本

eg:1.0.0、1.3-alpha-4、2.0

如果要更新到遠(yuǎn)程倉庫里面,需要更改版本號來更新最新的版本。獲取最新的版本也需要通過最新的版本號來標(biāo)識

SNAPSHOT版本

SNAPSHOT版本是在標(biāo)識一個(gè)不穩(wěn)定的版本??梢杂脕碇付ㄩ_發(fā)過程中的一個(gè)版本的快照

eg:2.1-SNAPSHOT、2.1-20111211.221323-11(快照為2.1版本,與2011年12月11日22點(diǎn)12分23秒第11次修訂)

快照更新到遠(yuǎn)程倉庫,在發(fā)布的過程中,Maven會自動(dòng)為構(gòu)建打上時(shí)間戳。這樣在倉庫中就能找到該構(gòu)建2.1-SNAPSHOT的最新文件。

通常在配置文件中會設(shè)置Maven是多久檢查更新構(gòu)件,默認(rèn)是一天檢查更新構(gòu)件是否為最新構(gòu)件。在同一個(gè)版本的發(fā)布,建議使用以下命令來更新版本

mvn clean install-U

了解坐標(biāo)

Maven有個(gè)很大的優(yōu)勢就在于管理項(xiàng)目依賴。為了能自動(dòng)地解析任何一個(gè)Java構(gòu)件,Maven就必須將它們唯一標(biāo)識,這就是依賴管理的底層基礎(chǔ) --- 坐標(biāo)
坐標(biāo)能夠快速、準(zhǔn)確的定位到某個(gè)構(gòu)件(jar、war文件),通過設(shè)置中央倉庫的地址,可以快速的從該中央倉庫下載我們需要的一些主鍵。

坐標(biāo)的詳解:(*表示必填)

  • groupId*:定義該模塊隸屬于哪個(gè)公司的項(xiàng)目,表示方式和java包的表示方式類似,與域名的定義方向一一對應(yīng)。
  • artifactId*:定義該模塊的名稱。用于區(qū)分不同的功能模塊。
  • version*:定義該模塊的版本定義
  • packaging:定義該模塊的打包方式(jar、pom、war),packaging是可選的,默認(rèn)為jar。
  • classifier:該元素用來定義構(gòu)建輸出的一些附屬構(gòu)建。附屬構(gòu)建與主構(gòu)件對應(yīng)。(例如主構(gòu)件的java文檔和源代碼 nexus-indexer-2.0.0-javadoc.jar、nexus-indexer-2.0.0-sources.jar),不能直接定義!
項(xiàng)目坐標(biāo)

依賴標(biāo)簽解析

根元素project下的dependencies可以包含一個(gè)或者多個(gè)dependency元素。
每個(gè)dependency元素包含的元素有:

  • groupId*:(參考項(xiàng)目坐標(biāo))
  • artifactId*:(參考項(xiàng)目坐標(biāo))
  • version*:(參考項(xiàng)目坐標(biāo))
  • type:依賴的類型,對應(yīng)于項(xiàng)目坐標(biāo)定義的packaging,一般來說都不必聲明默認(rèn)是jar,
  • scope:依賴的范圍
  • optional:標(biāo)記依賴是否可選
  • exclusions:用來排除傳遞性依賴。

依賴范圍

包含以下5中,system一般在項(xiàng)目中很少用到

  • compile:編譯依賴范圍(默認(rèn)),在編譯、測試和運(yùn)行中都需要使用該依賴。代表主鍵:spring-core
  • test:測試依賴范圍,只在測試有效,編譯和運(yùn)行時(shí)都無法使用該類依賴。代表主鍵:junit
  • provided:已提供依賴范圍,對在編譯和測試有效,在運(yùn)行時(shí)無效。代表主鍵:servlet-api
  • runtime:運(yùn)行時(shí)依賴范圍。對測試和運(yùn)行有效,編譯無效。代表主鍵:mysql驅(qū)動(dòng)包
  • system:系統(tǒng)依賴范圍,和provided依賴范圍完全一致,此類依賴不是通過Maven倉庫解析,依賴于操作系統(tǒng)的路徑,所以移植性很差。必須通過systemPath元素來制定依賴文件的路徑,該元素也可以引用環(huán)境變量。
依賴范圍(Scope) 對于編譯classpath有效 對于測試classpath有效 對于運(yùn)行時(shí)classpath有效 例子
compile Y Y Y spring-core
test - Y - junit
provided Y Y - servlet-api
runtime - Y Y jdbc驅(qū)動(dòng)實(shí)現(xiàn)
system Y Y - 本地類庫

依賴性和傳遞范圍

A依賴于B,B依賴于C,則A對于B是第一直接依賴,B對于C是第二直接依賴。
第一直接依賴的范圍和第二直接依賴的范圍決定了傳遞性依賴的范圍
左邊是第一直接依賴,上邊為第二直接依賴,中間的交叉單元格表示依賴傳遞的依賴范圍。

compile test provided runtime
compile compile - - runtime
test test - - test
provided provided - provided provided
runtime runtime - - runtime

依賴優(yōu)先級原則

  • 路徑最近者優(yōu)先:通過判斷依賴路徑的長度來優(yōu)先使用路徑較短的依賴
  • 第一聲明者優(yōu)先:當(dāng)依賴路徑相等時(shí),在pom文件中聲明的順序決定了那個(gè)依賴優(yōu)先被解析使用。

各種依賴

可選依賴

A->B、B->X、B->Y
根據(jù)傳遞性依賴的定義,如果這三個(gè)依賴的范圍都是compile,那么X、Y就是A的compile范圍傳遞性依賴的定義。
然而,由于X、Y都是可選依賴,依賴將不會得以傳遞,即:X、Y將不會對A有任何影響
引入可選依賴特性可以解決X和Y的特性是互斥的情況,例如B是一個(gè)持久化層隔離工具包,依賴的X和Y是多種數(shù)據(jù)庫驅(qū)動(dòng)包,我們在項(xiàng)目中使用該工具包的時(shí)候只會依賴于一種數(shù)據(jù)庫。
optional元素標(biāo)記依賴為可選依賴
如果B的兩個(gè)可選依賴為如下:

<dependencies>
   <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connection-java</artifactId>
       <version>5.1.10</version>
       <option>true</option>
   </dependency>
   <dependency>
       <groupId>postgresql</groupId>
       <artifactId>postgresql</artifactId>
       <version>8.4-701.jdbc3</version>
       <option>true</option>
   </dependency>
</dependencies>

這兩個(gè)依賴只會對B產(chǎn)生影響,當(dāng)其他項(xiàng)目依賴于B的時(shí)候,這兩個(gè)依賴不會被傳遞。
當(dāng)A依賴于B的時(shí)候,可以顯示的聲明某個(gè)依賴

<dependencies>
   <dependency>
       <groupId>cn.lookzp.mvnbook</groupId>
       <artifactId>B</artifactId>
       <version>1.0.0</version>
   </dependency>
   <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connection-java</artifactId>
       <version>5.1.10</version>
   </dependency>
</dependencies>

排除依賴

在dependency元素中使用exclusions元素,exclusions中定義exclusion元素定義排除的依賴

<exclusions>
    <exclusion>
        <groupId>..</groupId>
        <artifactId>...</artifactId>
    </exclusion>
</exclusions>

歸類依賴

如果多個(gè)依賴中使用的版本是一樣的,或者方便管理依賴的版本,這時(shí)候可以使用歸類依賴來聲明依賴的版本信息。
properties中聲明版本變量屬性,在properties中聲明的屬性名稱可以自定義。
在依賴中使用Maven的屬性,就需要使用 ${元素名稱} 的形式使用

<properties>
    <springframework.version>2.5.6</springframework.version>
</properties>

優(yōu)化依賴

可以通過mvn dependency:list或者mvn dependency:tree命令查看到當(dāng)前項(xiàng)目解析的依賴。
mvn dependency:list:羅列依賴
mvn dependency:tree:以樹的形式羅列

Maven在Eclipse中的使用

Maven目錄結(jié)構(gòu)

|- src
    |-main
         |-java  主目錄代碼
         |-resources 配置文件(property、xml)
         |-webapp web文件夾(和webcontext是一樣的)
    |-test
         |-java 測試的java代碼
         |-resources 測試的配置文件(不配置也行)

在eclipse中配置Maven

m2e軟件,一般在eclipse中已經(jīng)集成,不需要自己安裝。如果eclipse沒有m2e插件,可以找到菜單項(xiàng)中的help下的Install New Software...,彈出框下的work with填寫http://download.eclipse.org/technology/m2e/releases下載路徑,然后然后下載插件即可

在eclipse中下載m2e插件

eclipse里面自帶里面的Maven版本可以用,但是一般配置自己Maven版本到項(xiàng)目中去


配置自己的Maven到項(xiàng)目中

找到Installations和User Settings目錄,
Installations:選擇自己安裝的Maven軟件
User Settings:指向自己安裝的Maven項(xiàng)目的settings.xml配置文件,本地倉庫會自動(dòng)定位到配置文件中的倉庫地址

Maven項(xiàng)目構(gòu)建

步驟:
1、 新建maven項(xiàng)目
2、 跳過骨架,不跳過骨架創(chuàng)建的項(xiàng)目是目錄不全的
3、 填寫骨架


image.png
  • group id:域名倒寫(如:cn.lookzp.hello)
  • artifact id:開發(fā)模塊的項(xiàng)目名稱(如:HelloServelt)
  • packaging:pom表示多人開發(fā)于一個(gè)項(xiàng)目,war表示的是web項(xiàng)目,jar表示打包后可以給其他項(xiàng)目引用
  • name:項(xiàng)目名稱(寫不寫意義不大)
  • description:項(xiàng)目描述

4、 處理創(chuàng)建工程后的紅色叉號
一個(gè)web工程是需要web.xml配置文件的,但是跳過骨架創(chuàng)建的Maven工程師沒有web.xml文件的。
兩種解決方式:

  • 拷貝其他項(xiàng)目中的web.xml文件
  • 項(xiàng)目生產(chǎn)web.xml文件
    • 配置動(dòng)態(tài)web模塊的版本(默認(rèn)是2.5版本),項(xiàng)目右鍵找到屬性


      image.png
    • 修改完后,需要更新一下maven,項(xiàng)目右鍵找到Maven -> Update Project
    • 生成web.xml文件
      image.png

      很奇怪的是,每次生成web.xml都是修改Dynamic Web Module版本前的版本。所以我都是生成后刪除再刪除一邊。如果有已有的項(xiàng)目中存在,可以直接導(dǎo)入該web.xml配置文件

5、 修改編譯的版本(參考下面的在pom.xml配置文件中常用的插件小節(jié)),可以不配置
修改后必須 Maven -> Update Project
:Dynamic Web Module的版本依賴于jdk的版本

6、 添加tomcat版本(參考下面的在pom.xml配置文件中常用的插件小節(jié)),可以不配置
修改后必須 Maven -> Update Project
7、 運(yùn)行項(xiàng)目:
項(xiàng)目右鍵 -> Run At -> Maven build... -> Goals

運(yùn)行tomcat7

如果已經(jīng)配置了的,以后運(yùn)行直接找到Maven build,點(diǎn)擊運(yùn)行即可

在pom.xml配置文件中常用的插件

處理編譯版本

默認(rèn)的編譯版本為jdk1.5

<build>
  <!-- 配置了很多插件 -->
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.5.1</version>  
      <configuration>
        <source>1.7</source>
        <target>1.7</target>
        <encoding>UTF-8</encoding>
      </configuration>
    </plugin>
  </plugins>
</build>

了解:可以在settings.xml中配置全局的jdk編譯版本

<profile>  
  <id>jdk18</id>  
  <activation>  
    <activeByDefault>true</activeByDefault>  
    <jdk>1.8</jdk>  
  </activation>  
  <properties>  
    <maven.compiler.source>1.8</maven.compiler.source>  
    <maven.compiler.target>1.8</maven.compiler.target>  
    <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>  
  </properties>   
</profile>  

添加tomcat插件

默認(rèn)的tomcat為6,在控制面板中啟動(dòng)tomcat6的執(zhí)行命令為mvn tomcat:run

<plugin>
  <groupId>org.apache.tomcat.maven</groupId>
  <artifactId>tomcat7-maven-plugin</artifactId>
  <version>2.2</version>
  <configuration>
    <port>8000</port>
    <path>/hello</path>
  </configuration>
</plugin>

在控制面板中啟動(dòng)tomcat7的執(zhí)行命令:mvn tomcat7:run

Maven索引中找到依賴

Window -> show View -> Other -> Maven -> Maven Repositories
在視圖中,右鍵Local Repository中添加索引

Maven中使用Debug模式

Debug模式的使用和tomcat的直接運(yùn)行會有點(diǎn)不太一樣!
Debug模式需要選擇項(xiàng)目源來測試,在Source中,Add添加Project就能把項(xiàng)目加入到Debug調(diào)試模式中

image.png

Maven中快速添加junit測試

需要測試的類,右鍵


添加junit test

選擇test目錄


選擇test目錄

分模塊開發(fā)Maven項(xiàng)目

在一個(gè)項(xiàng)目中,有可能存在多人開發(fā)的情況,這種情況就需要分工合作去開發(fā),有可能一個(gè)Maven項(xiàng)目會分成幾個(gè)模塊進(jìn)行開發(fā),這樣每個(gè)模塊直接就需要銜接。這時(shí)候就需要依靠于私服來幫我們完成,將自己開發(fā)的模塊發(fā)布到私服中,給其他開發(fā)成員下載自己的模塊進(jìn)行開發(fā)。

還記得前面講到的pom打包模式嗎?這個(gè)就是運(yùn)用于多人開發(fā)模式的

  • 創(chuàng)建Maven父工程,選擇的packaging為:pom(多人開發(fā))

    image.png

    父工程中的pom.xml文件,所有的依賴和插件都在父工程的pom.xml中配的好處是,子工程都可以通過繼承的方式獲得依賴,就不需要在子工程的pom.xml文件中進(jìn)行配置
    父工程的pom.xml文件配置

  • 創(chuàng)建Maven子工程dao模塊,選擇的packaging為:jar,(這樣就可以依賴給其他項(xiàng)目)

    dao子工程模塊

    dao模塊中的pom.xml配置
    dao模塊中的pom.xml配置

如果其他人需要依賴于你dao模塊中的信息,你需要把自己的模塊打包到私服中,在項(xiàng)目中右鍵執(zhí)行命令install打包!然后再別人的項(xiàng)目中就可以通過依賴的方式把你的模塊打包到本地中進(jìn)行開發(fā)。

以此類推
:對于web模塊需要更改打包的方式為war

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,428評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,024評論 3 413
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,285評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,548評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,328評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,878評論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,098評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,616評論 1 331
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,554評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,725評論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 43,971評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,361評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,613評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,339評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,695評論 2 370