前段時間進行了一點maven的入門學習,在這裏作個記錄,但願能幫到一些正在學習的朋友們。maven版本爲3.3.9。但願你們以爲好的點個贊,以爲很差的多提提意見和建議作個交流。這裏也貼出我學習Maven的視頻地址,你們也能夠自行觀看http://www.imooc.com/learn/443html
首先,在官網中下載maven組件。進入官網後,在左邊菜單找到Download選項,點擊進入Download頁面。java
下拉頁面,在File下選擇合適的文件進行下載。web
Maven與JDK同樣,須要配置環境變量,先創建一個M2_HOME變量,方便之後移動的時候修改路徑,隨後在Path中加入:%M2_HOME%\bin;spring
配置後在控制檯輸入 mvn -v ,出現maven及jdk的相關信息即爲配置成功:apache
至此,便可完成maven環境變量的配置。api
maven工程與以往的java工程目錄結構有所不一樣,以往的java工程目錄目錄通常只有一個src用於存放包及java文件,而maven工程目錄長這樣: 瀏覽器
src
-main
-java
-包
-test
-java
-包緩存
通常咱們將一些主要的內容,放在main/java下面,而測試代碼放在test/java下,這樣在運行時,maven才能夠識別目錄並進行編譯。tomcat
瞭解了目錄結構後,就能夠開始第一個maven項目了。(爲了更加便於理解maven,暫時採用控制檯+記事本Editplus的操做方式,IDE將在後面使用。)
服務器
先按照目錄結構創建好目錄:、,這裏包名爲cn.edu.HelloWorld
先編寫Hello.java:
1 package cn.edu.HelloWorld; 2 3 public class Hello{ 4 public String sayHello(){ 5 return "Hello Maven"; 6 } 7 }
再編寫測試TestClass.java,這裏使用junit4框架:
1 package cn.edu.HelloWorld; 2 3 import org.junit.*; 4 5 public class TestClass{ 6 @Test 7 public void testHello(){ 8 System.out.println(new Hello().sayHello()); 9 } 10 }
添加一個maven的配置文件pom.xml(該文件在一些開源框架中如struts,spring中能夠找到,也能夠百度進行下載,在這裏也提供一份,以供複製):
<?xml version="1.0" encoding="UTF-8"?> <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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <!--groupId、artifactId、version爲必需,將在後面介紹--> <groupId>cn.edu.HelloWorld</groupId> <artifactId>maven01</artifactId> <version>0.0.1SNAPSHOT</version> <dependencies> <!--在這裏引入junit4的依賴--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies> </project>
打開控制檯,進入到工程的目錄下,執行mvn compile命令:
看到BUILD SUCCESS表示編譯成功(第一次編譯可能須要下載環境比較慢)
編譯成功後會在項目下生成一個target文件夾,裏面存放編譯後的文件
編譯成功後執行mvn test命令,運行測試類:
看到SUCCESS便可看到結果,輸出Hello Maven:
來看一下maven幾個經常使用的構建命令,格式爲mvn xxx:
mvn
-v 查看maven版本及其餘相關信息
compile 編譯maven項目,並生成target文件夾
test 運行test目錄下的測試文件,即測試
package 將項目打包,默認打包爲jar格式,也能夠打包成war格式用於服務器運行
install 將打包的jar文件安裝到maven本地倉庫(倉庫後面會詳細介紹)
clean 刪除targert,至關於清除緩存
在前面咱們採用手動的方式進行目錄創建,顯得略微有點繁瑣,那麼這裏介紹一個插件用於生成符合maven規範的目錄。
首先從控制檯進入須要生成文件夾的位置,而後運行mvn archetype:generate(第一次須要下載組件比較慢,如果下載不下來能夠設置一下maven的國內鏡像庫,百度即有步驟,這裏不作介紹):
出現如下界面,提示咱們選擇生成一個版本類型的maven結構,這裏選擇7(默認爲7),quickstart:
確認後要求輸入groupId、artifactId(也會做爲文件夾名)、version(默認爲1.0-SNAPSHOT)、package(即包的結構),這裏依次輸入:
提示確認,輸入Y確認後進行生成。出現SUCCESS,則表示生成成功:
進入生成的項目中,輸入mvn compile test進行確認:
打開文件夾便可看到咱們生成的文件目錄,已經符合了maven規範,且能夠運行。
maven使用groupId、artifactId、version表示座標,每一個座標都惟一的指向一個maven項目,簡單介紹一下這幾個標籤
groupId:項目組織惟一的標識符,通常爲反寫的公司網址+項目名
artifactId:項目的惟一的標識符,通常爲項目名+模塊名
version:版本號 x.x.x+版本類型
第一個x表示大版本號
第二個x表示分支版本號
第三個x表示小版本號(可省略)
常見版本類型:
snapshot快照
alpha內部測試
beta公測
release穩定
GA正式發佈
注:包名應與groupId+artifactId相吻合
maven中的依賴管理就是靠着倉庫,倉庫分爲中央倉庫及本地倉庫。在編譯項目時,maven會根據配置的依賴,先在本地倉庫中進行搜索,如果沒有則再去中央倉庫進行搜索,而搜索即是採用座標進行查找。
默認本地倉庫位於C盤之下,若是進行還原系統之類的便會清空十分不便,這裏說一下更改本地倉庫路徑的方法:
在maven組件目錄下的conf文件夾內,有一個setting.xml,打開文件,搜索localRepository標籤,使用localRepository標籤修改路徑便可
多個生命週期之間相互獨立。每一個生命週期含有多個階段,階段按順序執行,運行後階段時,前階段會自動執行。好比,直接運行mvn test命令,那麼執行該命令時,會自動的附帶mvn compile命令,由於test階段在compile階段以後。
完整的項目構建構成包括:
清理、編譯、測試、打包、集成測試、驗證、部署
clean 清理項目,包括如下階段:
pre-clean 執行清理前
clean 清理上一次構建生成的全部文件
post-clean 執行清理後的文件
default 構建項目(核心:經常使用),包括如下階段
compile 編譯
test 測試
packeage 打包
install 安裝
site 生成項目站點,根據pom中信息生成項目站點,包括如下階段
pre-site 在生成項目站點前要完成的工做
site生成項目的站點文檔
post-site在生成項目站點後要完成的工做
site-deploy發佈生成的站點到服務器上
maven中提供了許多功能強大的插件,讓咱們更好的管理項目。一個插件一般提供了一組目標,可以使用如下語法來執行:
mvn [plugin-name]:[goal-name]
例如咱們以前使用mvn archetype:generate,插件名爲archetype,而目標爲generate。咱們能夠在官網的Plugins標籤下,查找到插件的座標及插件目標的詳細描述。
Maven 提供如下兩種類型插件:
類型 | 描述 |
---|---|
構建插件 | 在生成過程當中執行,並在 pom.xml 中的<build/> 元素進行配置 |
報告插件 | 在網站生成期間執行,在 pom.xml 中的 <reporting/> 元素進行配置 |
如下是一些常見的插件列表:
插件 | 描述 |
---|---|
clean | 編譯後的清理目標,刪除目標目錄 |
compiler | 編譯 Java 源文件 |
surefile | 運行JUnit單元測試,建立測試報告 |
jar | 從當前項目構建 JAR 文件 |
war | 從當前項目構建 WAR 文件 |
javadoc | 產生用於該項目的 Javadoc |
antrun | 從構建所述的任何階段運行一組 Ant 任務 |
source | 從當前項目構建帶源碼的JAR文件 |
這裏咱們經過使用source插件做爲例子,來看看如何在maven中配置插件:
首先咱們快速建立一個maven項目(可使用archetype),在pom.xml中加入如下內容:
<build> <!-- 配置插件集 --> <plugins> <plugin> <!--使用插件的座標進行引用 --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>3.0.0</version> <executions> <execution> <!-- 綁定在哪一個過程時一同執行,這裏咱們讓它在使用package打包時一同執行 --> <phase>package</phase> <!--執行的目標類型,關於目標的詳細介紹能夠在maven官網中查到--> <goals> <goal>jar-no-fork</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
接下來,在命令控制檯,輸入mvn package查看結果:
出現成功信息後,能夠在我項目的target中找到打包後的jar文件及src-jar文件
從這個例子中,咱們能夠總結出如下幾個關鍵點:
<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"> <!-- 當前pom的版本--> <modelVersion>4.0.0</modelVersion> <!--座標--> <groupId>cn.edu</groupId> <artifactId>maven04</artifactId> <version>0.0.1-SNAPSHOT</version> <!-- 默認是jar,其餘war zip pom等 --> <packaging>jar</packaging> <!--項目描述名 --> <name>maven04</name> <!-- 項目地址 --> <url>http://maven.apache.org</url> <!-- 配置參數 --> <properties> <!-- 這裏配置項目編譯編碼爲UTF-8--> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <!-- 開發人員信息 --> <developers></developers> <!-- 項目描述 --> <description></description> <!-- 許可信息 --> <licenses></licenses> <!-- 組織信息 --> <organization></organization> <!-- 依賴集,用於配置依賴 --> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <!-- 依賴範圍:這個jar包只在範圍內生效,範圍外引用會報錯,這裏讓junit只在test時被依賴。 其餘一些狀況,如:servlet-api.jar,在編譯階段須要引用,而在服務器運行階段則不須要引用,就可使用scope--> <scope>test</scope> <!-- 默認爲false,子項目將會繼承,true時子項目並需顯式引用 --> <optional>false</optional> <!-- 排除依賴列表:用於去除傳遞依賴等,在後面會詳細介紹--> <exclusions> <exclusion></exclusion> </exclusions> </dependency> </dependencies> <!-- 依賴管理 爲依賴進行統一管理,若是在父項目中聲明此標籤時,在子項目中不需聲明,確保父子項目依賴版本一致; 如子項目須要不一樣版本的依賴,只需在子項目中進行聲明便可,將會覆蓋父項目中的聲明。 --> <!-- <dependencyManagement> <dependencies> <dependency></dependency> </dependencies> </dependencyManagement> --> <!--配置構建時的屬性--> <build> <plugins></plugins> </build> <!-- 指定父模塊 --> <!-- <parent></parent> --> <!-- 用於聚合編譯多個maven模塊 --> <modules></modules> </project>
本節開始使用Eclipse進行編寫,使用上與控制檯方式出入不大。先略微介紹下Eclipse中構建maven項目:在新建項目時選擇maven project(需安裝maven插件,eclipse3.1以上自帶)
設置好路徑後在選擇版本的界面,選擇quickstart版本:
輸入信息後點擊finish便可構建maven項目:
完成步驟後,通常狀況下會自動建立符合規範的maven項目。個別出現文件夾不符合規範的狀況,可使用項目右鍵→new→source folder自行建立補充。
運行命令只要右鍵項目,run as→maven build的Goals中輸入便可,這裏輸入時不需輸入mvn。例如:mvn compile只需輸入compile。
首先要知道,maven中提供了三種classpath:編譯、測試、運行
scope標籤
-compile 默認,編譯測試運行均有效,會傳遞
-provided 在編譯和測試時有效,如servletAPI能夠加入,不傳遞
-runtime 在測試和運行時有效,如JDBCAPI能夠加入
-test 在測試時有效,如junit能夠加入
-system 在編譯和測試時有效,與本機系統相關聯,移植性差,在系統中之外部jar包的形式引入,不會在倉庫中查找
-import 導入,只能用在dependecyManagement中,表示從其餘pom中導入dependecy的配置
先來看看什麼是傳遞依賴,好比如今有這麼個狀況:
C依賴B、B依賴A——C→B→A,那麼此時C也會依賴A且會包含A中的依賴,這就是傳遞依賴。接下來咱們經過一個例子來詳細瞭解依賴及如何消除傳遞依賴:
現有ABC三個項目:
A中額外依賴了一個commons-io的jar包:
B中對A進行依賴:
C中對B進行依賴:
保存以後能夠看到,C中不但包含B,還包含A和A依賴的common-io:
那麼如何消除傳遞依賴呢,這裏就使用到<exclusion>標籤了,在C中配置依賴B的地方加入如下內容:
保存後就能夠看到,C中關於A的依賴消失了,傳遞依賴的問題就解決了。
假設如今有這麼個狀況:A依賴common-io的2.4版本,B依賴common-io的2.5版本,C依賴A、B,那麼此時C中的common-io是哪一個版本的?
這就是依賴衝突,在maven中應對依賴衝突有兩種解決方式:短路優先,先聲明優先
先聲明優先:顧名思義,在pom中,寫在配置文件上面的優先,好比此時A的依賴配置在B之上,那C中就爲2.4版本的common-io。
短路優先:優先選擇依賴路徑較短的一端。假設如今多出一個D,依賴狀況改成D依賴B,C依賴A、D——C→A、C→D→B,那麼這裏就是A的依賴路徑比較短,因此爲2.4版本。
試想一下這樣的狀況,在一個項目中,分模塊使用了maven,那麼可能在這個項目中會有五六個,或者更多的maven項目存在。若是此時須要編譯或測試要怎麼辦呢,進入每一個maven項目中進行mvn compile麼,那就要執行五六次的compile命令,十分繁瑣,這裏就能夠用maven的聚合來解決這個問題。
現有ABC三個工程,那麼咱們使用一個新的工程D,來聚合他們,之後只要對D進行編譯便可對三個工程同時進行編譯。使用module標籤進行聚合:
<modules> <!--這裏的路徑是基於D項目的pom.xml路徑,module標籤內爲指向其餘項目的pom文件的路徑 這裏個人ABCD項目在同一個文件夾內,那麼從D內的pom中,經過../項目名,來找到其餘項目的pom.xml--> <module>../A</module> <module>../B</module> <module>../C</module> </modules>
另外一種情形,若是多個maven項目具備相同的依賴時或配置時,那麼應該如何處理呢?這裏就用到繼承的概念,在maven中使用<parent>標籤來進行繼承,下面經過一個例子來看一下:
首先創建一個項目,命名爲parent,在parent的pom文件聲明一個common-io的依賴,不過這裏用到了dependencyManagement:
<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>cn.edu</groupId> <artifactId>parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>parent</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <!-- 在這裏聲明的依賴能夠被子項目繼承引用 --> <dependencies> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> </dependencies> </dependencyManagement> </project>
能夠看到,雖然咱們在父項目中配置了依賴,可是卻不會在父項目中被引用:
在子項目B中,配置繼承parent並使用parent中的common-io版本:
<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>cn.edu</groupId> <artifactId>B</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>B</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <!-- 在parent標籤中使用父項目的座標進行配置 --> <parent> <groupId>cn.edu</groupId> <artifactId>parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <dependencies> <!-- 此處使用依賴時,就不需聲明版本 --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> </project>
配置後保存便可看到,此處的依賴版本即爲父項目中的版本:
這裏介紹兩種的web項目:規範目錄的web項目及傳統目錄的web項目。再介紹使用兩種服務器容器:tomcat和jetty運行的方法。因爲tomcat中有許多的須要注意的問題,較爲複雜,因此這裏先從簡單的jetty入手。
首先構建項目,此次選擇版本的時候咱們選擇webapp:
創建好後的webapp項目,其目錄結構是這樣的:
這裏的resources文件夾用於存放java文件、包、xml配置文件等等,與咱們傳統意義上的src文件夾是一致的。這裏src下的webapp文件夾則等同於咱們Web項目中的WebRoot或WebContent,一些頁面和樣式等文件放在這個目錄下。
接下來看看pom文件:
先注意到咱們這裏的打包方式變爲了war,web項目必需先編譯打包,而後才能部署到web容器上運行。以後只需配置咱們的jetty運行插件。
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.edu</groupId> <artifactId>mavenweb</artifactId> <packaging>war</packaging> <version>1.2.2-SNAPSHOT</version> <name>mavenweb Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> <build> <finalName>mavenweb</finalName> <plugins> <!--這裏用到jetty的插件,在官網中能夠找到座標--> <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>9.4.1.v20170120</version> </plugin> </plugins> </build> </project>
先使用package命令進行打包,能夠看到target中出現了咱們webapp文件夾下的內容,以及打包好的war文件。
複製使用這個war文件也可完成部署。但咱們這裏使用jetty插件,在命令框中輸入jetty:run命令,觀察到
說明服務器啓動完成。
接下來在瀏覽器使用localhost:8080便可看到咱們的項目中的index.jsp
至此就完成了咱們規範目錄的web項目構建。
使用maven的web項目結構,可能會有少量的不習慣,或者咱們要將之前開發的項目轉爲mavenweb項目的話,那要怎麼辦呢?這裏就介紹下非規範目錄的web項目要如何構建。
首先,這是咱們的項目目錄結構,java等文件仍是放在main/java下,而頁面等其餘資源文件放在WebContent下:
看看pom文件中的配置方法:
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.edu</groupId> <artifactId>mavenweb</artifactId> <packaging>war</packaging> <version>1.2.2-SNAPSHOT</version> <name>mavenweb Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> <build> <finalName>mavenweb</finalName> <!-- 資源集 --> <resources> <!-- 非規範資源文件目錄打包 --> <resource> <!-- 指定資源存放的目錄(必需,不寫會報錯),即resources目錄的變動。如下配置中的的相對目錄改成該目錄 --> <directory>src/main/java</directory> <includes> <include>*.xml</include> </includes> <!-- 是否替換資源文件中的屬性,如${username},替換爲pom中指定的properties--> <filtering>false</filtering> </resource> </resources> <plugins> <!--這裏使用到war plugin,一樣的,詳細介紹及座標在官網中能夠找到--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.0.0</version> <configuration> <!-- 指定web.xml的文件位置 --> <webXml>WebContent/WEB-INF/web.xml</webXml> <!-- war的源目錄,由哪一個文件夾打包成war文件,用於更改頁面樣式等的資源目錄 --> <warSourceDirectory>WebContent</warSourceDirectory> </configuration> </plugin> <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>9.4.1.v20170120</version> </plugin> </plugins> </build> </project>
完成配置後,使用package命令進行打包。看到target中的打包結果,確實更改了來源目錄並打包成功:
接下來使用jetty:run或jetty:deploy等運行命令便可成功運行項目。
使用tomcat時,會趕上許多的問題,在這裏整理,但願能幫上一些朋友。
問題一:tomcat插件版本問題
tomcat這個插件在官網的描述中是這樣的:
那麼我這裏使用的是tomcat7,我就使用了下面的那份座標,可是在使用tomcat:run命令是發現:
也是找了很久才發現這個問題,我明明使用的是tomcat7的插件,可是運行起來倒是不知道哪裏來的6.0版本。
正確的方式是:運行tomcat7:run命令,其實這點在官網中也有提到,怪本身沒認真看了。
tomcat:run默認使用的是6.0版本的tomcat,可是奇怪的一點,我機子上並無6.0版本的tomcat,那麼這裏的是哪來的呢?但願有大神知曉的可以解答,先謝過了!
問題二:Cannot invoke Tomcat manager: Server rened HTTP response code: 403 for URL
這個問題,第一是要打開tomcat的Manage權限,在百度有許多相關的解決方法,我就很少說了。這裏貼幾個我以爲寫的還不錯的帖子:
http://blog.csdn.net/u012052168/article/details/52448943
https://my.oschina.net/angel243/blog/178554
第二個點,也是我趕上的主要問題:Eclipse的tomcat的webapp目錄爲workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps,而並不是$CATALINA_HOME/webapp,這也就致使了Eclipse中啓動tomcat的話,是沒有Root、Manage等項目的,更不用說Manage權限了。
解決方式:http://blog.csdn.net/snakewarhead/article/details/6175833
最後,貼上最終個人pom文件,供你們作個參考:
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.edu</groupId> <artifactId>mavenweb</artifactId> <packaging>war</packaging> <version>1.2.2-SNAPSHOT</version> <name>mavenweb Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-core --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.5.8</version> </dependency> </dependencies> <build> <finalName>mavenweb</finalName> <!-- 資源集 --> <resources> <!-- 非規範資源文件目錄打包 --> <resource> <!-- 指定資源存放的目錄(必需,不寫會報錯)基礎目錄,如下目錄全在該目錄下 --> <directory>src/main/java</directory> <includes> <include>*.xml</include> </includes> <!-- 是否替換資源文件中的屬性,如${username},替換爲pom中指定的properties--> <filtering>false</filtering> </resource> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.0.0</version> <configuration> <!-- 指定web.xml的文件位置 --> <webXml>WebContent/WEB-INF/web.xml</webXml> <!-- war的源目錄,由哪一個文件夾打包成war文件,用於更改資源目錄 --> <warSourceDirectory>WebContent</warSourceDirectory> <!-- <webappDirectory>WebContent</webappDirectory> 打包的目標目錄--> </configuration> </plugin> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.1</version> <configuration> <url>http://localhost:8080/manager/html</url> <server>tomcat7</server> <!-- 此處的名字必須和setting.xml中配置的ID一致 --> <username>admin</username> <password>root</password> <path>/mavenweb</path> <!-- 此處的名字是項目發佈的工程名 --> </configuration> </plugin> <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>9.4.1.v20170120</version> </plugin> </plugins> </build> </project>