3. Maven常用命令和工程創(chuàng)建

我們可以在cmd 中通過(guò)一系列的 maven 命令來(lái)對(duì)我們的 maven-helloworld 工程進(jìn)行編譯弟胀、測(cè)試些侍、運(yùn)行渡贾、打包誓焦、安裝颠焦、部署。

1. compile

compile 是 maven 工程的編譯命令撰糠,作用是將 src/main/java 下的文件編譯為 class 文件輸出到 target目錄下饥悴。
cmd 進(jìn)入命令狀態(tài),執(zhí)行mvn compile烤镐,如下圖提示成功:


image.png

image.png
2. test

test 是 maven 工程的測(cè)試命令 mvn test蛋济,會(huì)執(zhí)行src/test/java下的單元測(cè)試類。
cmd 執(zhí)行 mvn test 執(zhí)行 src/test/java 下單元測(cè)試類炮叶,下圖為測(cè)試結(jié)果碗旅,運(yùn)行 1 個(gè)測(cè)試用例,全部成功镜悉。


image.png
3. clean

clean 是 maven 工程的清理命令祟辟,執(zhí)行 clean 會(huì)刪除 target 目錄及內(nèi)容。

4. package

package 是 maven 工程的打包命令侣肄,對(duì)于 java 工程執(zhí)行 package 打成 jar 包旧困,對(duì)于web 工程打成war包。

5. install

install 是 maven 工程的安裝命令稼锅,執(zhí)行 install 將 maven 打成 jar 包或 war 包發(fā)布到本地倉(cāng)庫(kù)吼具。

當(dāng)后面的命令執(zhí)行時(shí),前面的操作過(guò)程也都會(huì)自動(dòng)執(zhí)行

Maven 指令的生命周期

maven 對(duì)項(xiàng)目構(gòu)建過(guò)程分為三套相互獨(dú)立的生命周期矩距,請(qǐng)注意這里說(shuō)的是“三套”拗盒,而且“相互獨(dú)立”,
這三套生命周期分別是:
Clean Lifecycle 在進(jìn)行真正的構(gòu)建之前進(jìn)行一些清理工作锥债。
Default Lifecycle 構(gòu)建的核心部分陡蝇,編譯,測(cè)試哮肚,打包登夫,部署等等。
Site Lifecycle 生成項(xiàng)目報(bào)告允趟,站點(diǎn)悼嫉,發(fā)布站點(diǎn)。

maven的概念模型

Maven 包含了一個(gè)項(xiàng)目對(duì)象模型 (Project Object Model)拼窥,一組標(biāo)準(zhǔn)集合戏蔑,一個(gè)項(xiàng)目生命周期(Project Lifecycle),一個(gè)依賴管理系統(tǒng)(Dependency Management System)鲁纠,和用來(lái)運(yùn)行定義在生命周期階段(phase)中插件(plugin)目標(biāo)(goal)的邏輯总棵。


image.png
  • 項(xiàng)目對(duì)象模型 (Project Object Model)
    一個(gè) maven 工程都有一個(gè) pom.xml 文件,通過(guò) pom.xml 文件定義項(xiàng)目的坐標(biāo)改含、項(xiàng)目依賴情龄、項(xiàng)目信息、插件目標(biāo)等。
  • 依賴管理系統(tǒng)(Dependency Management System)
    通過(guò) maven 的依賴管理對(duì)項(xiàng)目所依賴的 jar 包進(jìn)行統(tǒng)一管理骤视。
    比如:項(xiàng)目依賴 junit4.9鞍爱,通過(guò)在 pom.xml 中定義 junit4.9 的依賴即使用 junit4.9,如下所示是 junit4.9的依賴定義:
<!-- 依賴關(guān)系 -->
<dependencies>
    <!-- 此項(xiàng)目運(yùn)行使用 junit专酗,所以此項(xiàng)目依賴 junit -->
    <dependency>
        <!-- junit 的項(xiàng)目名稱 -->
        <groupId>junit</groupId>
        
        <!-- junit 的模塊名稱 -->
        <artifactId>junit</artifactId>
        
        <!-- junit 版本 -->
        <version>4.9</version>
        
        <!-- 依賴范圍:?jiǎn)卧獪y(cè)試時(shí)使用 junit -->
        <scope>test</scope>
    </dependency>
</dependencies> 
  • 一個(gè)項(xiàng)目生命周期(Project Lifecycle)
    使用 maven 完成項(xiàng)目的構(gòu)建睹逃,項(xiàng)目構(gòu)建包括:清理、編譯祷肯、測(cè)試沉填、部署等過(guò)程,maven 將這些過(guò)程規(guī)范為一個(gè)生命周期佑笋,如下所示是生命周期的各各階段:


    image.png

    maven 通過(guò)執(zhí)行一些簡(jiǎn)單命令即可實(shí)現(xiàn)上邊生命周期的各各過(guò)程翼闹,比如執(zhí)行 mvn compile 執(zhí)行編譯、執(zhí)行 mvn clean 執(zhí)行清理蒋纬。

  • 一組標(biāo)準(zhǔn)集合
    maven將整個(gè)項(xiàng)目管理過(guò)程定義一組標(biāo)準(zhǔn)猎荠,比如:通過(guò) maven 構(gòu)建工程有標(biāo)準(zhǔn)的目錄結(jié)構(gòu),有標(biāo)準(zhǔn)的生命周期階段蜀备、依賴管理有標(biāo)準(zhǔn)的坐標(biāo)定義等关摇。

  • 插件(plugin)目標(biāo)(goal)
    maven 管理項(xiàng)目生命周期過(guò)程都是基于插件完成的。

IntelliJ IDEA開(kāi)發(fā)maven項(xiàng)目

File-->Settings配置maven


image.png
image.png

-DarchetypeCatalog=internal

創(chuàng)個(gè)建一個(gè)maven的web工程


image.png

選擇提供好的maven 的web工程模板


image.png

填寫項(xiàng)目信息


image.png
image.png
image.png
image.png
image.png
image.png

創(chuàng)建一個(gè) Servlet


image.png

有錯(cuò)誤琼掠,因?yàn)槲覀儧](méi)有導(dǎo)入servlet的依賴坐標(biāo)

package com.neuedu.servlet;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class MyServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        request.getRequestDispatcher("/hello.jsp").forward(request, response);
    }
}

在pom.xml 文件添加坐標(biāo):
添加 jar 包的坐標(biāo)時(shí),還可以指定這個(gè) jar 包將來(lái)的作用范圍停撞。
每個(gè) maven 工程都需要定義本工程的坐標(biāo)瓷蛙,坐標(biāo)是 maven 對(duì) jar 包的身份定義。
例如:

  <!--項(xiàng)目名稱戈毒,定義為組織名+項(xiàng)目名艰猬,類似包名-->
  <groupId>com.neuedu</groupId>
  <!-- 模塊名稱 -->
  <artifactId>hello_maven</artifactId>
  <!-- 當(dāng)前項(xiàng)目版本號(hào),snapshot 為快照版本即非正式版本埋市,release為正式發(fā)布版本 -->
  <version>1.0-SNAPSHOT</version>
  <!--打包類型
      jar:執(zhí)行 package 會(huì)打成 jar 包
      war:執(zhí)行 package 會(huì)打成 war 包-->
  <packaging>war</packaging>
  <!--放置的都是項(xiàng)目運(yùn)行所依賴的jar包-->
  <dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <!--作用域 provided編譯時(shí)起作用冠桃,運(yùn)行時(shí)不起作用-->
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

坐標(biāo)的來(lái)源方式

https://search.maven.org/

image.png

依賴范圍
A 依賴 B,需要在 A 的 pom.xml 文件中添加 B 的坐標(biāo)道宅,添加坐標(biāo)時(shí)需要指定依賴范圍食听,依賴范圍包括:

  • compile:編譯范圍,指 A在編譯時(shí)依賴 B污茵,此范圍為默認(rèn)依賴范圍樱报。編譯范圍的依賴會(huì)用在編譯、測(cè)試泞当、運(yùn)行迹蛤,由于運(yùn)行時(shí)需要所以編譯范圍的依賴會(huì)被打包。
  • provided:provided 依賴只有在當(dāng) JDK 或者一個(gè)容器已提供該依賴之后才使用, provided 依賴在編譯和測(cè)試時(shí)需要盗飒,在運(yùn)行時(shí)不需要嚷量,比如:servlet api 被 tomcat 容器提供。
  • runtime:runtime 依賴在運(yùn)行和測(cè)試系統(tǒng)的時(shí)候需要逆趣,但在編譯的時(shí)候不需要蝶溶。比如:jdbc的驅(qū)動(dòng)包。由于運(yùn)行時(shí)需要所以 runtime 范圍的依賴會(huì)被打包汗贫。
  • test:test 范圍依賴 在編譯和運(yùn)行時(shí)都不需要身坐,它們只有在測(cè)試編譯和測(cè)試運(yùn)行階段可用,比如:junit落包。由于運(yùn)行時(shí)不需要所以test范圍依賴不會(huì)被打包部蛇。
  • system:system 范圍依賴與 provided 類似,但是你必須顯式的提供一個(gè)對(duì)于本地系統(tǒng)中 JAR文件的路徑咐蝇,需要指定 systemPath 磁盤路徑涯鲁,system依賴不推薦使用。


    image.png

在 maven-web 工程中測(cè)試各各 scop有序。
測(cè)試總結(jié):

  • 默認(rèn)引入 的 jar 包 ------- compile 【默認(rèn)范圍 可以不寫】(編譯抹腿、測(cè)試、運(yùn)行 都有效 )
  • servlet-api 旭寿、jsp-api ------- provided (編譯警绩、測(cè)試 有效, 運(yùn)行時(shí)無(wú)效 防止和 tomcat 下 jar 沖突)
  • jdbc 驅(qū)動(dòng) jar 包 ---- runtime (測(cè)試盅称、運(yùn)行 有效 )
  • junit ----- test (測(cè)試有效)
    依賴范圍由強(qiáng)到弱的順序是:compile>provided>runtime>test

項(xiàng)目中添加的坐標(biāo):
1肩祥、設(shè)置jdk編譯版本
使用 jdk1.8,需要設(shè)置編譯版本為 1.8缩膝,這里需要使用 maven 的插件來(lái)設(shè)置:在 pom.xml 中加入:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

jdk全局修改

<profile>
            <id>jdk-1.8</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>

創(chuàng)建普通Java工程


image.png

image.png

image.png

image.png
image.png

pom基本配置

pom.xml 是 Maven 項(xiàng)目的核心配置文件混狠,位于每個(gè)工程的根目錄,基本配置如下:
<project > :文件的根節(jié)點(diǎn) .
<modelversion > : pom.xml 使用的對(duì)象模型版本
<groupId > :項(xiàng)目名稱疾层,一般寫項(xiàng)目的域名
<artifactId > :模塊名稱将饺,子項(xiàng)目名或模塊名稱
<version > :產(chǎn)品的版本號(hào) .
<packaging > :打包類型,一般有 jar痛黎、war予弧、pom 等
<name > :項(xiàng)目的顯示名,常用于 Maven 生成的文檔湖饱。
<description > :項(xiàng)目描述桌肴,常用于 Maven 生成的文檔
<dependencies> :項(xiàng)目依賴構(gòu)件配置,配置項(xiàng)目依賴構(gòu)件的坐標(biāo)
<build> :項(xiàng)目構(gòu)建配置琉历,配置編譯坠七、運(yùn)行插件等水醋。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市彪置,隨后出現(xiàn)的幾起案子拄踪,更是在濱河造成了極大的恐慌,老刑警劉巖拳魁,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惶桐,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡潘懊,警方通過(guò)查閱死者的電腦和手機(jī)姚糊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)授舟,“玉大人救恨,你說(shuō)我怎么就攤上這事∈褪鳎” “怎么了肠槽?”我有些...
    開(kāi)封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)奢啥。 經(jīng)常有香客問(wèn)我秸仙,道長(zhǎng),這世上最難降的妖魔是什么桩盲? 我笑而不...
    開(kāi)封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任寂纪,我火速辦了婚禮,結(jié)果婚禮上赌结,老公的妹妹穿的比我還像新娘捞蛋。我一直安慰自己,他們只是感情好姑曙,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布襟交。 她就那樣靜靜地躺著迈倍,像睡著了一般伤靠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上啼染,一...
    開(kāi)封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天宴合,我揣著相機(jī)與錄音,去河邊找鬼迹鹅。 笑死卦洽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的斜棚。 我是一名探鬼主播阀蒂,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼该窗,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了蚤霞?” 一聲冷哼從身側(cè)響起酗失,我...
    開(kāi)封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎昧绣,沒(méi)想到半個(gè)月后规肴,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡夜畴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年拖刃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贪绘。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡兑牡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出兔簇,到底是詐尸還是另有隱情发绢,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布垄琐,位于F島的核電站边酒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏狸窘。R本人自食惡果不足惜墩朦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望翻擒。 院中可真熱鬧氓涣,春花似錦、人聲如沸陋气。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)巩趁。三九已至痒玩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間议慰,已是汗流浹背蠢古。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留别凹,地道東北人草讶。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像炉菲,于是被迫代替她去往敵國(guó)和親堕战。 傳聞我的和親對(duì)象是個(gè)殘疾皇子坤溃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 我們可以在cmd 中通過(guò)一系列的 maven 命令來(lái)對(duì)我們的 maven-helloworld 工程進(jìn)行編譯、測(cè)試...
    遼A丶孫悟空閱讀 661評(píng)論 0 17
  • 第1章 Maven 介紹 什么是 Maven 什么是 Maven Maven 的正確發(fā)音是[?mev?n]嘱丢,而不是...
    強(qiáng)某某閱讀 2,375評(píng)論 0 25
  • 一浇雹、maven的兩個(gè)作用 項(xiàng)目自動(dòng)化構(gòu)建,通過(guò)命令行就可以完成整個(gè)項(xiàng)目構(gòu)建過(guò)程屿讽,不需要我們手動(dòng)地進(jìn)行項(xiàng)目構(gòu)建 管理...
    lifeline張閱讀 840評(píng)論 0 1
  • 前言 在Java項(xiàng)目開(kāi)發(fā)中昭灵,項(xiàng)目的編譯、測(cè)試伐谈、打包等是比較繁瑣的烂完,屬于重復(fù)勞動(dòng)的工作,浪費(fèi)人力和時(shí)間成本诵棵。以往開(kāi)發(fā)...
    JourWon閱讀 1,117評(píng)論 0 1
  • Maven的基本了解 什么是Maven抠蚣? Maven就是Apache下的一個(gè)開(kāi)源項(xiàng)目。它是用純java開(kāi)發(fā)的履澳。是一...
    Bcome閱讀 2,785評(píng)論 0 7