Java-Maven詳解

一、什么是Maven?

Apache Maven是一個(gè)軟件項(xiàng)目管理的綜合工具。基于項(xiàng)目對(duì)象模型(POM)的概念,提供了幫助管理構(gòu)建、文檔、報(bào)告、依賴、發(fā)布等方法,Maven簡(jiǎn)化和標(biāo)準(zhǔn)化項(xiàng)目建設(shè)過程。處理編譯,分配,文檔,團(tuán)隊(duì)協(xié)作和其他任務(wù)的無縫連接。 Maven增加可重用性并負(fù)責(zé)建立相關(guān)的任務(wù)。

1.png

1)Maven好處

  • 可以將項(xiàng)目過程規(guī)范化、自動(dòng)化、高效化以及強(qiáng)大的可擴(kuò)展性,利用maven自身及其插件還可以獲得代碼檢查報(bào)告、單元測(cè)試覆蓋率、實(shí)現(xiàn)持續(xù)集成等等。

  • 使得項(xiàng)目的管理變得容易,構(gòu)建項(xiàng)目的速度更快,由于Maven提供了倉(cāng)庫(kù)的概念去管理jar包,所以用git或者svn的時(shí)候,存儲(chǔ)構(gòu)建的項(xiàng)目體積會(huì)更小。

2)作用

管理項(xiàng)目的構(gòu)建、文檔生成、報(bào)告、依賴、SCMs(software configuration Management)、分布、分發(fā)、郵件列表。

二、Maven的基本原理

采用遠(yuǎn)程倉(cāng)庫(kù)和本地倉(cāng)庫(kù)以及一個(gè)核心的配置文件pom.xml,pom.xml中定義的jar文件從遠(yuǎn)程倉(cāng)庫(kù)下載到本地倉(cāng)庫(kù),各個(gè)項(xiàng)目使用同一個(gè)本地倉(cāng)庫(kù)的jar,同一個(gè)版本的jar只需下載一次,而且避免每個(gè)應(yīng)用都去拷貝jar。同時(shí)它采用了現(xiàn)在流行的插件體系架構(gòu),所以maven的核心非常的小,只有幾兆大小的文件,在執(zhí)行maven任務(wù)時(shí),才會(huì)自動(dòng)下載需要的插件。

具體的概念模型如下圖:


2.png

Maven官方把maven定義為一個(gè)項(xiàng)目管理工具,下面我們來看看maven給我們的項(xiàng)目管理做了哪些工作?

  • 項(xiàng)目標(biāo)準(zhǔn)化

Maven項(xiàng)目具有統(tǒng)一的項(xiàng)目結(jié)構(gòu),這個(gè)項(xiàng)目結(jié)構(gòu)是參考業(yè)界的最佳實(shí)踐而成,為后面使用統(tǒng)一的maven命令打下了基礎(chǔ),如測(cè)試mvn test、打包mvn package等,無需寫一行腳本,就可以方便的實(shí)現(xiàn)眾多功能。

  • 文檔和報(bào)告

使用mvn site可以快速生成項(xiàng)目站點(diǎn),apache很多開源項(xiàng)目站點(diǎn)都采用maven生成,會(huì)出現(xiàn)built by maven字樣的圖標(biāo)。

  • 類庫(kù)管理

類庫(kù)管理是maven一個(gè)比較核心的功能,我們就需要將項(xiàng)目所依賴的類庫(kù)加入到pom.xml中,那么maven會(huì)自動(dòng)將依賴的類庫(kù)下載到本地,并且下載的類庫(kù)如果還依賴其他的類庫(kù),它也會(huì)自動(dòng)下載過來,這樣我們就不需要一個(gè)一個(gè)類庫(kù)去下載了。

發(fā)布管理

使用maven可以方便的進(jìn)行項(xiàng)目發(fā)表管理。在項(xiàng)目開發(fā)到一定階段,可以使用mvn package打包,它會(huì)自動(dòng)先運(yùn)行mvn test,跑所有的Test Case,只有全部通過才能正確打包。生成的war包(如果項(xiàng)目的packaging為war)在target目錄下。這個(gè) war包與使用ant腳本生成一樣,但無需一行腳本,這也是maven對(duì)比ant的優(yōu)勢(shì)之一。使用mvn install將編譯和打包好的文件發(fā)布到本地倉(cāng)庫(kù)中。使用mvn deploy在整合或者發(fā)布環(huán)境下執(zhí)行,將最終版本的包拷貝到遠(yuǎn)程的repository。

三、Maven安裝

官網(wǎng)地址:http://maven.apache.org/
Maven下載地址:http://maven.apache.org/download.cgi

3.png

這里我兩個(gè)環(huán)境的版本都下載,分別在我本機(jī)和linux虛擬機(jī)安裝。

1)Window安裝Maven

1、解壓

# 解壓的目錄
D:\software\Maven\apache-maven-3.8.4-bin
4.png

Maven根目錄文件介紹:

  • bin:Maven的運(yùn)行腳本。bin\mvn.cmd是基于windows的腳本。在cmd中每輸入一條mvn的命令都是在調(diào)用并執(zhí)行這些腳本。
  • boot:該項(xiàng)目只有一個(gè)文件plexus-classworlds-2.5.2.jar。他是一個(gè)類加載器的框架,相當(dāng)于對(duì)JDK中的類的加載器,提供了豐富的語(yǔ)法以此用來方便配置,Maven使用該框架加載自己的類庫(kù)。
  • conf:該目錄包含了一個(gè)非常重要的文件setting.xml。配置該文件就可以在Project中定制Maven的行為。
  • lib:包含了所有Maven運(yùn)行時(shí)需要的Java類庫(kù)以及用到的第三方類庫(kù)。
  • LICENSE:軟件許可
  • NOTICE:軟件引用的三方軟件
  • README.txt:包含了Maven的簡(jiǎn)介

2、Maven環(huán)境變量配置

  • 依賴Java,需要配置JAVA_HOME,沒有裝jdk的還得先裝jdk

  • 設(shè)置Maven自身自身的運(yùn)行環(huán)境,需要配置MAVEN_HOME

  • 配置完JAVA_HOME和MAVEN_HOME,還得配置Path,在Path加上:%JAVA_HOME%\bin和%MAVEN_HOME%\bin

5.png

3、驗(yàn)證

# 這里使用git bash
$ java -version
$ mvn -v
6.png

4、配置本地倉(cāng)庫(kù)(資源下到哪)

# 創(chuàng)建本地存放jar包目錄
D:\software\Maven\repository
# 找到maven安裝目錄下conf/settings.xml
7.png

5、配置阿里鏡像倉(cāng)庫(kù)(資源從哪來)

先查找默認(rèn)的配置,在lib目錄下隨便找個(gè)jar包用解壓工具打開-》再回到上層目錄-》ctrl+F搜索pom.找到pom-4.0.0.xml-》把這個(gè)文件拖出來打開

8.png

9.png

10.png

11.png

但是注意不是去修改jar包里面的這個(gè)配置,還是回到conf/setting.xml這個(gè)配置文件,修改這個(gè)配置文件。

<mirror>
  <!-- 此鏡像的唯一標(biāo)識(shí),用來區(qū)分不同的mirror元素 -->
  <id>nexus-aliyun</id>
  <!-- 對(duì)哪種倉(cāng)庫(kù)進(jìn)行鏡像,簡(jiǎn)單的就是替代哪個(gè)倉(cāng)庫(kù) -->
  <mirrorOf>central</mirrorOf>
  <!-- 鏡像名稱 -->
  <name>Nexus aliyun</name>
  <!-- 鏡像url -->
  <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
12.png

2)Linux安裝Maven

1、下載解壓

$ mkdir -p  /opt/software
$ cd /opt/software
$ wget https://dlcdn.apache.org/maven/maven-3/3.8.4/binaries/apache-maven-3.8.4-bin.tar.gz
$ tar -zvxf apache-maven-3.8.4-bin.tar.gz -C /opt/software/

2、配置環(huán)境變量

# 在/etc/profile
export PATH=/opt/software/apache-maven-3.8.4/bin:$PATH

# 加載生效
$ source /etc/profile

3、驗(yàn)證

$ java -version
$ mvn -v
13.png

四、創(chuàng)建Maven項(xiàng)目

1)手動(dòng)構(gòu)建maven項(xiàng)目

默認(rèn)git bash是沒有tree命令的,這里提供下載地址:
官網(wǎng)下載地址:http://gnuwin32.sourceforge.net/packages/tree.htm
百度云下載地址:
鏈接:https://pan.baidu.com/s/17fc79rQUQSnBhWzej9xd9g
提取碼:6666
把tree.exe放到git安裝目錄下的usr/bin/目錄下

1、創(chuàng)建文件

### 查看創(chuàng)建的目錄和目錄結(jié)構(gòu)
$ tree hello/
$ cat hello/src/main/java/com/test2022/Hello.java
$ cat hello/src/test/java/com/test2022/HelloTest.java
$ cat hello/pom.xml
14.png

15.png

2、編譯(mvn compile)

$ cd hello
$ mvn compile

發(fā)現(xiàn)編譯報(bào)錯(cuò)了:

\color{red}{【問題】 } [\color{red}{ERROR}] 不再支持源選項(xiàng) 5。請(qǐng)使用 7 或更高版本。
[\color{red}{ERROR}] 不再支持目標(biāo)選項(xiàng) 5。請(qǐng)使用 7 或更高版本。

16.png
  • \color{red}{【解決方案一】}修改全局,修改maven安裝目錄下conf/setting.xml文件,配置jdk,內(nèi)容如下:
<profile>
     <id>jdk-13</id>
     <activation>
         <activeByDefault>true</activeByDefault>
         <jdk>13</jdk>
     </activation>
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <maven.compiler.source>13</maven.compiler.source>
         <maven.compiler.target>13</maven.compiler.target>
     </properties>
</profile>
  • \color{red}{【解決方案二】}修改局部,修改項(xiàng)目目錄下的 pom.xml文件,配置jdk,內(nèi)容如下:
<properties>
    <!-- 這里填jdk的版本,我使用的是jkd13 -->
    <maven.compiler.target>13</maven.compiler.target>
    <maven.compiler.source>13</maven.compiler.source>
</properties>

這里我采用【解決方案一】修改全局的配置

再編譯,編譯成功

$ mvn compile
17.png

3、清理(mvn clean)

$ mvn clean
# 發(fā)現(xiàn)上面編譯產(chǎn)生的target目錄會(huì)刪掉
$ tree .
18.png

4、測(cè)試(mvn test)

$ mvn test
19.png

5、打包(mvn package)

【溫馨提示】這里只打包編譯好的源程序(xxx.class文件)

$ mvn package
20.png

6、安裝到本地倉(cāng)庫(kù)(mvn install)

【溫馨提示】這里groupid決定放在倉(cāng)庫(kù)的哪個(gè)文件下,配置<groupId>com.hello</groupId>,所以生成的包就會(huì)放在倉(cāng)庫(kù)目錄的com/hello目錄下。

21.png
22.png

會(huì)經(jīng)歷編譯(compile)-》測(cè)試(test)-》打包(package) -》安裝(install)的過程。

23.png

2)通過maven插件構(gòu)建項(xiàng)目(命令行操作)

1、構(gòu)建工程(模板)

模板:

mvn archetype:generate
-DgroupId={project-packaging}
-DartifactId={project-name}
-DarchetypeArtifactId=maven-archetype-quickstart
-DinteractiveMode=false

示例:

2、構(gòu)建java工程

$ mvn archetype:generate -DgroupId=com.test2022 -DartifactId=java-project -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=0.0.1-snapshot -DinteractiveMode=false
24.png

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


25.png

3、構(gòu)建web工程

$ mvn archetype:generate -DgroupId=com.test2022 -DartifactId=web-project -DarchetypeArtifactId=maven-archetype-webapp -Dversion=0.0.1-snapshot -DinteractiveMode=false 
26.png

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


27.png

3)通過IDEA創(chuàng)建空項(xiàng)目來構(gòu)建maven java項(xiàng)目

【溫馨提示】IDEA官網(wǎng)下載地址:https://www.jetbrains.com/idea/

1、創(chuàng)建一個(gè)Empty Project

28.png

29.png

2、配置jdk

30.png

3、配置maven

File->Settings,把默認(rèn)配置自帶的maven修改上面下載的版本


31.png

4、創(chuàng)建maven工程

32.png

33.png

34.png

35.png

36.png

37.png

38.png

5、編寫測(cè)試代碼

39.png

6、編譯構(gòu)建

40.png

7、配置運(yùn)行環(huán)境

41.png

配置編譯


42.png

配置清理


43.png

右上角就有兩個(gè)運(yùn)行的快捷選項(xiàng)了


44.png

4)通過IDEA模板構(gòu)建maven java項(xiàng)目

1、搜索quickstart模板創(chuàng)建

45.png

46.png

47.png

2、默認(rèn)的目錄結(jié)構(gòu)

會(huì)默認(rèn)創(chuàng)建一個(gè)org.example的demo,可以刪掉

48.png

3、手動(dòng)創(chuàng)建缺少的目錄

發(fā)現(xiàn)main和test里面都沒創(chuàng)建resources,下面我們手動(dòng)創(chuàng)建


49.png

4、修改目錄屬性

如果創(chuàng)建的是普通目錄,則可以右鍵目錄修改目錄屬性


50.png

5)通過IDEA模板構(gòu)建maven java-web項(xiàng)目

1、搜索webapp模板創(chuàng)建

51.png

52.png

2、默認(rèn)目錄結(jié)構(gòu)

53.png

3、手動(dòng)創(chuàng)建沒創(chuàng)建的目錄

54.png

55.png

4、創(chuàng)建一個(gè)index.jsp文件

56.png

5、添加tomcat插件

在maven庫(kù)中搜索tomcat:https://mvnrepository.com/

57.png

58.png

這里使用2.1版本的


59.png

60.png
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.1</version>
            <configuration>
                <port>80</port>
                <path>/</path>
            </configuration>
        </plugin>
    </plugins>
</build>
61.png

6、運(yùn)行web工程

【溫馨提示】默認(rèn)端口是8080,上面配置的80

62.png

發(fā)現(xiàn)報(bào)錯(cuò)了
\color{red}{ 嚴(yán)重: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener}

【原因&解決】是因?yàn)槟J(rèn)創(chuàng)建的web.xml配置文件里有spring的配置,先把這些配置刪掉就行。最后web.xml只保留如下內(nèi)容:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
         xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

</web-app>

再運(yùn)行


63.png

64.png

7、配置快捷運(yùn)行方式

65.png

66.png

五、Maven依賴管理

1)依賴配置

依賴指當(dāng)前項(xiàng)目運(yùn)行所需的jar包,一個(gè)項(xiàng)目可以設(shè)置多個(gè)依賴,示例如下:

<!-- 設(shè)置當(dāng)前項(xiàng)目所有依賴的所有jar包 -->
<dependencies>
  <!-- 設(shè)置具體的依賴 -->
  <dependency>
    <!-- 依賴所屬群組id -->
    <groupId>junit</groupId>
    <!-- 依賴所屬項(xiàng)目id -->
    <artifactId>junit</artifactId>
    <!-- 依賴版本號(hào) -->
    <version>4.12</version>
  </dependency>
</dependencies>

2)依賴傳遞

依賴具有傳遞性:

  • 間接依賴:在當(dāng)前項(xiàng)目中通過依賴配置建立的依賴關(guān)系
  • 直接依賴:被資源的資源如果依賴其它資源,當(dāng)前項(xiàng)目間接依賴其它資源

3)依賴管理

1、依賴傳遞沖突問題

  • 路徑優(yōu)先:當(dāng)前依賴中出現(xiàn)相同的資源時(shí),層級(jí)越深,優(yōu)先級(jí)越低,層級(jí)越淺,優(yōu)先級(jí)越高。
  • 聲明優(yōu)先:當(dāng)資源在相同層級(jí)被依賴時(shí),配置順序靠前的覆蓋配置順序靠后的。
  • 特殊優(yōu)先:當(dāng)同級(jí)配置了相同資源的不同版本,后配置的覆蓋先配置的。

2、可選依賴

可選依賴指對(duì)外隱藏當(dāng)前所依賴的資源----\color{red}{不透明}

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <!-- 配置不透明 -->
    <optional>true</optional>
</dependency>

3、排除依賴

排除依賴指主動(dòng)斷開依賴的資源,被排除的資源無需指定版本----\color{red}{不需要}

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <!-- 配置排除依賴 -->
    <exclusions>
        <exclusion>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

4、依賴范圍

  • 依賴的jar默認(rèn)情況可以在任何地方使用,可以通過scope標(biāo)簽設(shè)定起作用范圍
  • 作用范圍
    1. 主程序范圍有效(main文件夾范圍內(nèi))
    2. 測(cè)試程序范圍有效(test文件夾范圍內(nèi))
    3. 是否參與打包(package指令范圍內(nèi))
67.png

5、依賴范圍的傳遞性

帶有依賴范圍的資源在進(jìn)行傳遞時(shí),作用范圍將受到影響

68.png

六、生命周期與插件

1)項(xiàng)目構(gòu)建生命周期

Maven構(gòu)建生命周期描述的是一次構(gòu)建過程經(jīng)歷了多少的事件

69.png

2)Maven對(duì)構(gòu)建的生命周期劃分三個(gè)階段

  • clean:清理工作
  • default:核心工作,例如編譯、測(cè)試、打包、部署等。
  • site:產(chǎn)生報(bào)告,發(fā)布站點(diǎn)等。

1、clean生命周期

  • pre-clean:執(zhí)行一些需要在clean之前完成的工作
  • clean:移除所有上一次構(gòu)建生成的文件
  • post-clean:執(zhí)行一些需要在clean之后立刻完成的工作

2、default構(gòu)建生命周期

  • validate (校驗(yàn)):校驗(yàn)項(xiàng)目是否正確并且所有必要的信息可以完成項(xiàng)目的構(gòu)建過程。
  • initialize (初始化):初始化構(gòu)建狀態(tài),比如設(shè)置屬性值。
  • generate-sources (生成源代碼):生成包含在編譯階段中的任何源代碼。
  • process-sources (處理源代碼):處理源代碼,比如說,過濾任意值。
  • generate-resources (資源文件):生成將會(huì)包含在項(xiàng)目包中的資源文件。
  • process-resources (處理資源文件):復(fù)制和處理資源到目標(biāo)目錄,為打包階段最好準(zhǔn)備。
  • \color{red}{ compile(編譯)}:編譯項(xiàng)目的源代碼。
  • process-classes (處理類文件):處理編譯生成的文件,比如說對(duì)Java class文件做字節(jié)碼改善優(yōu)化。
  • generate-test-sources (生成測(cè)試源代碼):生成包含在編譯階段中的任何測(cè)試源代碼。
  • process-test-sources (處理測(cè)試源代碼):處理測(cè)試源代碼,比如說,過濾任意值。
  • generate-test-resources (生成測(cè)試資源文件):為測(cè)試創(chuàng)建資源文件。
  • process-test-resources (處理測(cè)試資源文件):復(fù)制和處理測(cè)試資源到目標(biāo)目錄。
  • \color{red}{test-compile} (編譯測(cè)試源碼):編譯測(cè)試源代碼到測(cè)試目標(biāo)目錄。
  • process-test-classes (處理測(cè)試類文件):處理測(cè)試源碼編譯生成的文件。
  • \color{red}{test}(測(cè)試):使用合適的單元測(cè)試框架運(yùn)行測(cè)試(Juint是其中之一)。
  • prepare-package (準(zhǔn)備打包):在實(shí)際打包之前,執(zhí)行任何的必要的操作為打包做準(zhǔn)備。
  • \color{red}{package}(打包):將編譯后的代碼打包成可分發(fā)格式的文件,比如JAR、WAR或者EAR文件。
  • pre-integration-test (集成測(cè)試前):在執(zhí)行集成測(cè)試前進(jìn)行必要的動(dòng)作。比如說,搭建需要的環(huán)境。
  • integration-test (集成測(cè)試):處理和部署項(xiàng)目到可以運(yùn)行集成測(cè)試環(huán)境中。
  • post-integration-test (集成測(cè)試后):在執(zhí)行集成測(cè)試完成后進(jìn)行必要的動(dòng)作。比如說,清理集成測(cè)試環(huán)境。
  • verify (驗(yàn)證):運(yùn)行任意的檢直來驗(yàn)證項(xiàng)目包有效達(dá)到質(zhì)量標(biāo)準(zhǔn)。
  • \color{red}{install} (安裝):安裝項(xiàng)目包到本地倉(cāng)庫(kù),這樣項(xiàng)目包可以用作其他本地項(xiàng)目的依賴。
  • deploy (部署):將最終的項(xiàng)目包復(fù)制到遠(yuǎn)程倉(cāng)庫(kù)中與其他開發(fā)者和項(xiàng)目共享。

【溫馨提示】:像compile、test、test-compile、package、install等,排在它們前面的步驟都會(huì)執(zhí)行。圖示如下:

70.png

3、site構(gòu)建的生命周期

  • pre-site:執(zhí)行一些需要在生成站點(diǎn)文檔之前完成的工作
  • site:生成項(xiàng)目的站點(diǎn)文檔
  • post-site:執(zhí)行一些需要在生成站點(diǎn)文檔之后完成的工作,并且為部署做準(zhǔn)備
  • site-deploy:將生成的站點(diǎn)文檔部署到特殊的服務(wù)器上

3)插件

插件與生命周期內(nèi)的階段綁定,在執(zhí)行到對(duì)應(yīng)生命周期時(shí)執(zhí)行對(duì)應(yīng)的插件功能,默認(rèn)maven在各個(gè)生命周期上綁定有預(yù)設(shè)的功能,通過插件可以自定義其他功能。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>2.2.1</version>
            <executions>
                <execution>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                    <phase>generate-test-resources</phase>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

七、工程版本管理

  • SNAPSHOT (快照版本)

項(xiàng)目開發(fā)過程中,為方便團(tuán)隊(duì)成員合作,解決模塊間相互依賴和時(shí)時(shí)更新的問題,開發(fā)者對(duì)每個(gè)模塊進(jìn)行構(gòu)建的時(shí)候,輸出的臨時(shí)性版本叫快照版本(測(cè)試階段版本),快照版本會(huì)隨著開發(fā)的進(jìn)展不斷更新。

  • RELEASE (發(fā)布版本)

項(xiàng)目開發(fā)到進(jìn)入階段里程碑后,向團(tuán)隊(duì)外部發(fā)布較為穩(wěn)定的版本,這種版本所對(duì)應(yīng)的構(gòu)件文件是穩(wěn)定的,即便進(jìn)行功能的后續(xù)開發(fā),也不會(huì)改變當(dāng)前發(fā)布版本內(nèi)容,這種版本稱為發(fā)布版本。

工程版本號(hào)約定規(guī)范:

【版本格式】<主版本>.< 次版本>.<i曾量版本 >.<里程碑版本>

  • 主版本:表示項(xiàng)目重大架構(gòu)的變更,如:spring5相較于spring4的迭代
  • 次版本:表示有較大的功能增加和變化,或者全面系統(tǒng)地修復(fù)漏洞
  • 增量版本:表示有重大漏洞的修復(fù)
  • 里程碑版本:表明一個(gè)版本的里程碑(版本內(nèi)部)。這樣的版本同下一個(gè)正式版本相比,相對(duì)來說不是很穩(wěn)定,有待更多的測(cè)試。

【范例】

5.1.9.RELEASE或5.1.9-RELEASE

八、多環(huán)境資源配置

一般公司至少有三套環(huán)境(開發(fā)、測(cè)試、生產(chǎn)),如果每次把程序打包好上傳到對(duì)應(yīng)的環(huán)境之前就得更改一下配置,是很煩的操作,所以就有了這里的多環(huán)境資源配置了。


71.png

示例:

<!-- 創(chuàng)建多環(huán)境 -->
<profiles>
    <!-- 定義具體的環(huán)境:開發(fā)環(huán)境 -->
    <profile>
        <id>dev</id>
        <!--…… -->
    </profile>
    <!-- 定義具體的環(huán)境:測(cè)試環(huán)境 -->
    <profile>
        <id>test</id>
        <!--…… -->
    </profile>
    <!-- 定義具體的環(huán)境:生產(chǎn)環(huán)境 -->
    <profile>
        <!-- 定義環(huán)境對(duì)應(yīng)的唯一id -->
        <id>pro</id>
        <!-- 定義環(huán)境中專用的屬性 -->
        <properties>
            <jdbc.url>jdbc:mysql://127.1.1.1:3306/ssm_db</jdbc.url>
        </properties>
        <!-- 設(shè)置默認(rèn)啟動(dòng) -->
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
</profiles>

通過命令加載指定環(huán)境

【調(diào)用格式】mvn 指令 -P 環(huán)境定義id

【示例】

$ mvn install -P pro

九、跳過測(cè)試

1)跳過測(cè)試環(huán)節(jié)的應(yīng)用場(chǎng)景

  • 整體模塊功能未開發(fā)
  • 模塊中某個(gè)功能未開發(fā)完畢
  • 單個(gè)功能更新調(diào)試導(dǎo)致其他功能失敗
  • 快速打包

2)跳過測(cè)試的兩種方法

  • 使用命令跳過測(cè)試

【調(diào)用格式】mvn 指令 –D skipTests

  • 使用配置跳過測(cè)試
<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.1</version>
    <configuration>
        <!-- 設(shè)置跳過測(cè)試 -->
        <skipTests>true</skipTests>
        <!-- 包含指定測(cè)試用例 -->
        <includes> 
            <include>**/User*Test.java</include>
        </includes>
        <!-- 排除指定測(cè)試用例 -->
        <excludes>
            <exclude>**/User*TestCase.java</exclude>
        </excludes>
    </configuration>
</plugin>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,321評(píng)論 6 543
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,559評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,442評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,835評(píng)論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,581評(píng)論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,922評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,931評(píng)論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,096評(píng)論 0 290
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,639評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,374評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,591評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,104評(píng)論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,789評(píng)論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,196評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,524評(píng)論 1 295
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,322評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,554評(píng)論 2 379

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