1. 程式人生 > >Maven教程:從零開始學習到深入瞭解

Maven教程:從零開始學習到深入瞭解

Maven 簡述

Maven是apache 官方推出的一款專案自動構建工具。這款工具可以方便我們專案依賴的維護,構建,測試,釋出。

不同構建工具的對比

  1. Eclipse

    使用eclipse進行專案構建,相對來說,步驟比較零散,不好操作

  2. Ant

    它是一個專門的專案構建工具,它可以通過一些配置來完成專案構建,這些配置要明確的告訴ant,原始碼包在哪?目標class檔案應該存放在哪?資原始檔應該在哪

  3. Maven

    它是一個專案管理工具,他也是一個專案構建工具,通過使用maven,可以對專案進行快速簡單的構建,它不需要告訴maven很多資訊,但是需要安裝maven去的規範去進行程式碼的開發。也就是說maven是有約束的。

  4. Gradle
    Gradle是一個基於Apache Ant和Apache Maven概念的專案自動化建構工具。它使用一種基於Groovy的特定領域語言(DSL)來宣告專案設定,拋棄了基於XML的各種繁瑣配置。

可以這樣說,Gradle是一款替代Maven的工具,但是Gradle 又有很多方面與Maven共用。說以學習Maven與學習Gradle不衝突,並且主流的很多企業依然在使用Maven。

Maven 的安裝

官方下載的地址是下面

解壓下載後的zip 包後,結構如下圖所示
這裡寫圖片描述

windows環境下的安裝

配置環境變數

MAVEN_HOME,這個環境變數的變數值,是我們解壓的後maven 所在的路徑
這裡寫圖片描述

配置Maven的環境變數Path路徑

這個Path主要是用於指向maven.exe路徑,由於我們之前配置了MAVEN_HOME環境變數,所以,在Path環境變數後面,只要追加

;%MAVEN_HOME%/bin

即可
這裡寫圖片描述

測試maven是否安裝成功

這裡寫圖片描述

如果可以看見輸出版本號,證明maven 已經安裝成功了。

Linux ->Ubuntu環境下的安裝方法

參考另外的一篇部落格關於maven 的安裝
Maven 是跨平臺的,所以他在任何一個平臺都是可以執行的。這裡講介紹如何在Ubuntu14上安裝maven 客戶端。其他linux發行版本請參照這個。大同小異。

安裝Jdk1.7

與window一樣,maven 以來jdk,所以必須先安裝jdk之後,才可以安裝maven
請參考百度經驗

這裡寫圖片描述

安裝maven

安裝maven 方法很簡單,只需要將下載的檔案解壓,並設定環境變數即可
1.找到我們下載的maven
這裡寫圖片描述

2.解壓這裡是使用命令列的方式解壓,不懂也可以通過7zip
這裡寫圖片描述

這裡寫圖片描述

3.將解壓後的資料夾移動到合適的位置
因為筆者習慣是將軟體安裝在$HOME/bin目錄下,所以在
/home/blueboz/bin/目錄下新建了一個Maven目錄,用於存放我們的maven

blueboz@BLUEBOZ:~/下載$ 
mv apache-maven-3.3.9 /home/blueboz/bin/maven/

4.設定環境變數

blueboz@BLUEBOZ:~$ 
export M2_HOME=/home/blueboz/bin/maven/

5.在Path 環境變數中追加Mavan bin目錄

blueboz@BLUEBOZ:~$ 
export PATH=$PATH:$M2_HOME/bin

6.檢驗maven是否安裝成功
輸入mvn -v 就可以看到Maven的版本了
這裡寫圖片描述

注意

在如果是使用export 命令在終端進行環境變數的設定的話,會出現這樣的問題,就是在系統重啟之後或者新開的終端,所有的剛剛配置的環境變數都將會失效,如何解決這個問題,那麼就是類似與windows,在專門配置檔案中寫入即可

修改系統環境變數

1.通過修改/etc/enviroment這個配置檔案即可.
gedit /etc/enviroment
2.檔案內容

只需要在後面新增所需要配置的環境變數資訊即可
修改前

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

修改後

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:$MAVEN_HOME/bin:$JAVA_HOME/bin"

MAVEN_HOME="/user/home/blueboz/bin/maven"

JAVA_HOME="/usr/lib/jvm/jdk1.8.0_121/"

修改使用者環境變數

1.通過修改使用者目錄下的 .bashrc

這個檔案,如果沒有就自己新建一個就可以了.注意前面的 點不能少!

blueboz@BLUEBOZ:/etc$ gedit ~/.bashrc

Maven的常用配置資訊

關於maven的配置檔案,可以指定兩種級別如下

  1. 使用者級別, 這個settings.xml 檔案為只為一個使用者提供配置資訊,(所謂一個使用者,通常是我們正在登陸的使用者。例如Administrator)並且經常放在~/.m2/settings.xml

  2. 全域性級別 ,全域性的settings.xml配置檔案在 mavenHome目錄下的/config/setting.xml 檔案,也就是現在的這個我們安裝maven 解壓包的conf目錄下。

通過在命令列模式下,輸入下面指令,我已獲得使用者目錄

echo %USERPROFILE%

配置資訊詳解

由於全域性配置資訊與單使用者配置檔案內容是一模一樣的,所以,這裡只將一種的配置方法.

全域性配置資訊在maven 解壓目錄下的conf目錄下的setting.xml檔案
這裡寫圖片描述
在ubuntu下那麼這個檔案在$MAVEN_HOME/conf目錄下的setting
這裡寫圖片描述

開啟這個配置檔案,我們可以就可以進行配置了

配置檔案結構

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
    <!--本地倉庫-->
    <localRepository>~/.m2/repository</localRepository>
    <!--Maven是否與使用者互動,預設值為true-->
    <interactiveMode>true</interactiveMode>
    <!--離線模式,預設值為false-->
    <offline>false</offline>
    <!--外掛組-->
    <pluginGroups></pluginGroups>
    <!--代理-->
    <proxies></proxies>
    <!--下載與部署倉庫的認證資訊-->
    <servers></servers>
    <!--倉庫映象-->
    <mirrors>
        <mirror>
            <id>bluebozRepo</id>
            <mirrorOf>central</mirrorOf>
            <name>Blueboz</name>
                <url>http://bluebozpc:8081/repository/maven-public/</url>
        </mirror>
    </mirrors>
    <!--Settings Profile-->s
    <profiles></profiles>
    <!--啟用Profile-->
    <activeProfiles></activeProfile>
</settings>

mirrors的配置

由於maven庫是在國外的,在下載構建的時候速度往往比較慢.因此可以配置國內的Nexus服或者直接使用自己的私服.
下面示例alibabaNexus服

<mirrors>
        <mirror>
            <id>Alibaba</id>
            <mirrorOf>*</mirrorOf>
            <name>AliyunMaven</name>
            <url>
        http://maven.aliyun.com/nexus/content/groups/public/
            </url>

        </mirror>
    </mirrors>

在示例中,mirrorOf的值為central,表示該配置為中央倉庫的映象,任何對於中央倉庫的請求都會轉至該映象.另外三個元素id,name,url 與一般的倉庫的配置無異,表示該映象倉庫的唯一標識.

如果mirrorOf 的值為星號.表示該配置是所有maven倉庫的映象,任何對於遠端倉庫的請求都會轉到對應映象.如果該倉庫需要認證.那麼配置一個id 為internal-repository的<server>即可.

1.<mirrorOf>*</mirrorOf>匹配所有遠端倉庫
2.<mirrorOf>external:*</mirrorOf>匹配所有不在本機上的的遠端倉庫
3.<mirrorOf>repo1,repo2</mirrorOf>匹配倉庫repo1和repo2使用逗號分割多個遠端倉庫
4.<mirrorOf>*,!repo1</mirrorOf>匹配所有倉庫,repo1除外.

Maven 命令的基本使用

使用mvn 指令建立java 專案

mvn archetype:generate -DgroupId=cn.blueboz -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

這裡寫圖片描述

使用該指令之後生成的專案結構是

使用mvn 指令建立web專案

mvn archetype:generate -DgroupId=cn.blueboz -DartifactId=my-webapp -Darche
typeArtifactId=maven-archetype-webapp -DinteractiveMode=false

這裡寫圖片描述

Maven中的座標和依賴

Maven install

mvn install

的作用是將當前所在的專案安裝到 localRepository中,也就是$HOME/.m2/repository 目錄下

install 之後呢就會出現在本地倉庫下面,如果本機的其他專案依賴到該專案的話,就可以通過parent屬性進行引用

例如下面

這是我的artifact為base的專案

<groupId>cn.boz.security</groupId>
<artifactId>base</artifactId>
<version>1.0-SNAPSHOT</version>

現在有一個子專案basechild需要引用到這個base 專案,那麼子專案的Pom檔案中有一段

<parent>
    <artifactId>base</artifactId>
    <groupId>cn.boz.security</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>

<!-- 
-因為是子專案,所以可以忽略GAV中的G(Group)V(Version)
-預設繼承父類屬性
-->
<artifactId>base-child</artifactId>

我們知道,base-child專案依賴base,專案,那麼假如這個base-chlid不在同一目錄下,那麼maven 將通過GAV去找父專案。但是找呀找,沒有找到,本地倉庫(未部署)沒找到,遠端倉庫更不用說,這時候,就會報錯。解決方法有兩個

一是在base 專案下,使用mvn install 將base專案安裝到localRepository中。

二是,在base-child專案下,pom檔案的parent節點,再加一段,相對論

   <relativePath>../base/pom.xml</relativePath>

這段相對路徑是告訴basechild專案,應該如何去查詢到自己的父專案。
從而避免了找不多構件的錯誤的發生

如何將構建部署到私服(deploy)

部署的命令是,如果沒有進行配置,一定會報錯的。因為你還沒有配置遠端私服的路徑,以及認證使用者名稱密碼,會報401錯誤

mvn install

對於公司內部,採用私服的方式進行開發,你開發了一個功能需要提供給B 使用,這時候,B通過GAV定位你的資源,會去私服上查詢你的資格構件,所以我們必須將這個構件上傳上去。

首先必須明確兩點

1.上傳到那裡去

下載之後是一個已經集成了Jettty的服務了。開啟bin目錄
注意,是需要使用終端進入的cmd
使用

>nexus /run

注意,Nexus 私服是需要jdk環境的,如果沒有jdk,執行是會報錯的,請記得配置好JAVA_HOME環境變數以及Path環境變數

如何修改服務的埠
\nexus-3.2.1-01\etc\nexus-default.properties
這個檔案下修改如下的配置即可
application-port=8081
application-host=0.0.0.0

配置完啟動之後,通過瀏覽器就能直接進行訪問了

這裡寫圖片描述

看到這個圖,也就說明私服搭建已經成功了。
但是管理的話需要使用者名稱密碼,
檢視官網文件,可以知道預設使用者名稱密碼如下
這裡寫圖片描述

也就是admin/admin123

那麼私服啟動之後,就需要開啟我們的Maven專案,pom.xml檔案,

 <distributionManagement>
        <repository>
            <id>releases</id>
            <name>Internal Release</name>
            <url>http://localhost:8081/repository/maven-releases/</url>
        </repository>
        <snapshotRepository>
            <id>snapshots</id>
            <name>Internal Snapshot</name>
            <url>http://localhost:8081/repository/maven-snapshots/</url>
        </snapshotRepository>
    </distributionManagement>

需要注意的是 <id> 配置的Id 必須是唯一的。而且不能夠重複,這個ID可以是隨意的。

這裡配置了兩個服務地址
一個是釋出版,一個是snapshot版
maven 通過我們當前的版本,判別是屬於Release版還是SNAPSHOT版
也就是通過<version>中是否有SNAPSHOT來判斷。

這裡引用百度知道上的一段說明

maven2會根據模組的版本號(pom檔案中的version)中是否帶有-SNAPSHOT來判斷是快照版本還是正式版本。如果是快照版本,那麼在mvn
deploy時會自動釋出到快照版本庫中,而使用快照版本的模組,在不更改版本號的情況下,直接編譯打包時,maven會自動從映象伺服器上下載最新的快照版本。如果是正式釋出版本,那麼在mvn
deploy時會自動釋出到正式版本庫中,而使用正式版本的模組,在不更改版本號的情況下,編譯打包時如果本地已經存在該版本的模組則不會主動去映象伺服器上下載。

知道本地的版本之後,部署的時候,就會去輪詢好已經配置了repository
根據snapshotRepository還是repository,來進行上傳

這裡寫圖片描述
如果下是遠端倉庫的配置項

2. 怎麼認證

你總不可以說無論誰都可以上傳吧。總得進行許可權控制
使用者名稱密碼實在我們的maven安裝路徑下的settings.xml檔案,或者使用者目錄下的.m2/settings.xml檔案
這裡寫圖片描述

如果有那麼一點linux常識的人應該也會知道,全域性配置(Maven 安裝目錄下的settings.xml)是要被使用者配置所覆蓋的,所以一般建議配置在使用者目錄下。但這也不是必須的。但是要記住,全域性配置有動一發而牽動全身的缺點。不廢話。直接配置檔案。

  <servers>
    <server>
        <id>releases</id>
        <username>blueboz</username>
        <password>chenchen</password>
    </server>
    <server>
        <id>snapshots</id>
        <username>blueboz</username>
        <password>chenchen</password>
    </server>
  </servers>

這裡強調一點,ID必須與剛剛配置的pom檔案中的ID要一致,否則會導致認證失敗!

Maven的profile

開發中有一個需求就是,根據當前的作業系統的型別,jdk版本號,去執行那個配置檔案,跟著根據命令去啟動配置資訊

實現方式可以在pom檔案中的profiles節點進行配置。
該節點允許你配置依賴,外掛。等pom檔案根節點允許配置的內容。其目的就是條件覆蓋。

如下。配置了一個ID為development的配置,下面配置了一個build節點,這個與pom根目錄的作用一模一樣。唯一的不同是,下面這部分配置如果正常執行時不生效的。需要使用

mvn compile -Pdevelopment

<profile>
    <id>development</id>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <debug>
                        false
                    </debug>
                    <optimize>true</optimize>
                </configuration>
            </plugin>
        </plugins>
    </build>
 </profile>

同樣,給出另外一個例子提供參考,跟你就jdk版本,系統版本,以及一些java SystemProperties進行判別,主要是在<activation>節點進行配置。

<!--執行mvn install 時候可以看到效果-->
    <profile>
        <id>jdk1.8</id>
        <activation>
            <jdk>1.8</jdk>
            <os>
                <name>Windows 7</name>
                <family>Windows</family>
                <arch>x64</arch>
                <version>5.0</version>
            </os>
            <property>
                <name>mavenVersion</name>
                <value>3.4.5</value>
            </property>
            <file>
                <exists>file1.properties</exists>
                <!--!表示非-->
                <missing>!file2.properties</missing>
            </file>
        </activation>
        <!--只在jdk8的時候,引入某一個模組-->
        <modules>
            <module>../basechild</module>
        </modules>
    </profile>

Maven套件

有時候,我們想根據自己的意思,對當前專案進行不同方式的打包。例如打包一個zip、或者gzip等等。那麼這時候,mvn assembly 就很有用了

如下圖所示,分別是使用不同壓縮模式進行壓縮。
這裡寫圖片描述

使用命令列的方式執行

assembly 這個外掛有兩個主要的目標(Goals) assembly/single

這裡寫圖片描述
引用《Maven 權威指南》中的一段話。

所以一般執行命令是

mvn assembly:single

同時maven 提供了幾種預設的套件描述符供我們使用,分別是

mvn assembly:single -DdescriptorId=jar-with-dependencies
mvn assembly:single -DdescriptorId=bin
mvn assembly:single -DdescriptorId=project
mvn assembly:single -DdescriptorId=src

分別對應到我們上面那張圖片

bin
假設一個專案構建了一個jar作為它的主構件, bin 描述符用來包裹該主構件和 專案的 LICENSE , README , 和
NOTICE 檔案。我們可以認為這是一個完全自包含項 目的最可能小的二進位制分發包
這個指令要求有一個jar檔案為基礎才可以執行構建
這裡寫圖片描述
jar-with-dependencies
jar-with-dependencies 描述符構建一個帶有主專案jar檔案和所有專案執行時依
賴未解開內容的JAR歸檔檔案。外加上適當的 Main-Class Manifest條目(在下面
的“外掛配置”討論),該描述符可以為你的專案生成一個自包含的,可執行的 jar,即使該專案含有依賴。
這裡寫圖片描述
project
project 描述符會簡單的將你檔案系統或者版本控制中的專案目錄結構整個的歸
檔。當然,target目錄會被忽略,目錄中的版本控制元資料檔案如 .svn 和 CVS 目
錄也會被忽略。基本上,該描述符的目的是建立一個解開後就立刻能由Maven構
建的歸檔。
這裡寫圖片描述
src
src 描述符生成一個包含你專案原始碼, pom.xml 檔案,以及專案根目錄中所
有 LICENSE , README ,和 NOTICE 檔案的歸檔。它類似於 project 描述符,大部分情況下能生成一個可以被Maven構建的歸檔。然而,由於它假設所有的原始檔和資
原始檔都位於標準的 src 目錄下,它就可能遺漏那些非標準的目錄和檔案,而這
些檔案往往對構建起著關鍵作用。
這裡寫圖片描述

在pom檔案中,將我們的套件繫結到package階段

參考我的程式碼中basechild專案程式碼,我們的主類在cn.boz.security.basechild.MyTester

<build>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.2-beta-5</version>
            <executions>
                <execution>
                    <id>create-executable-jar</id>
                    <phase>package</phase>
                    <goals>
                        <!--當執行pckage 會執行 assembly:single 這個命令-->
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <descriptorId>
                            jar-with-dependencies
                        </descriptorId>
                        <archive>
                            <manifest>
                                <mainClass>cn.boz.security.basechild.MyTester</mainClass>
                            </manifest>
                        </archive>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

主類程式碼

package  cn.boz.security.basechild;

public class MyTester {
    public static void main(String[] args){
        System.out.println("The main method is running...");
        System.out.println("The main method is stop");
    }
}

執行打包命令

mvn package

由於在上面的程式碼中,將assembly:single -DprojectId=jar-with-dependencies 綁定了,所以package 之後,target目錄會出現如下的檔案

這裡寫圖片描述

其中上面的jar包是package預設打包的jar包,僅僅是當前專案的原始碼打包,不適於java -jar 執行,會報錯,找不到主類的錯誤。

嘗試執行後面的檔案,見下圖效果
這裡寫圖片描述

可以看出,程式列印了我們在程式碼寫的兩句sysout

疑問,如何繫結多個套件

假設,我想project同時java-with-dependencies同時又src,又bin怎麼辦,如下程式碼所示即可。

<configuration>
<!--ref就是可以克服id 只能有一個的問題-->
    <descriptorRefs>
        <descriptorRef>project</descriptorRef>
        <descriptorRef>src</descriptorRef>
        <descriptorRef>bin</descriptorRef>
    </descriptorRefs>
</configuration>

自定義套件

Plugins中Executions的講解

通常,我們可以在mvn pluginID:goals進行外掛的執行。例如mvn assembly:single
但是我們也可以不用使用命令列進行執行,通過將這些指令繫結到maven的特定生命週期的時候,才執行 ,如下例子表明了將assembly:single -DdescriptorId=jar-with-dependencies繫結到package,這樣
在mvn package的時候,也會順勢執行我們所定義的這個外掛

 <plugin>
   <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2-beta-5</version>
    <executions>
        <execution>
            <id>create-executable-jar</id>
            <phase>package</phase>
            <goals>
                <!--當執行package 會執行 assembly:single 這個命令-->
                <goal>single</goal>
            </goals>
            <configuration>
                <descriptorId>
                    jar-with-dependencies
                </descriptorId>
                <archive>
                    <manifest>
                        <mainClass>cn.boz.security.basechild.MyTester</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </execution>
    </executions>
</plugin>

執行效果如下

$ mvn package
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building base-child 1.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-assembly-plugin:2.2-beta-5:single (create-executable-jar) @ base-c
hild ---
[INFO] Building tar : E:\WebDev\CAS\securityproj\basechild\target\base-child-1.1-SN
APSHOT-project.tar.gz
[INFO] Building tar : E:\WebDev\CAS\securityproj\basechild\target\base-child-1.1-SN
APSHOT-project.tar.bz2
[INFO] Building zip: E:\WebDev\CAS\securityproj\basechild\target\base-child-1.1-SNA
PSHOT-project.zip
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.908 s
[INFO] Finished at: 2018-04-06T16:36:48+08:00
[INFO] Final Memory: 21M/155M
[INFO] ------------------------------------------------------------------------

檢視外掛的完整描述

我們知道,外掛是由於Plugin+goal 組成,一個外掛有多個目標。就好比如
jetty:run 表示我們執行的是jetty這個外掛的run目標,但是如果想檢視一個外掛有多少目標,可以怎麼外掛,通過如下命令,可以檢視

$ mvn help:describe -Dplugin=jetty -Dfull

執行之後,可以看到如下的
這裡寫圖片描述

關於Maven中的繼承與依賴

繼承,也就是我們說的 pom檔案的父子繼承關於,多專案中可以書寫一個parent,裡面定義了本專案的所有依賴(dependency ),然後,子專案通過繼承 <parent> 從而獲得了父的所有依賴。

如何新增第三方骨架

我們知道,如果通過骨架來建立我們自己的專案 ,可以方便我們的開發。具體使用方法如下

mvn archetype:generate -DarchetypeGroupId=? -DarchetypeArtifactId=? [-DgroupId=? -DartifactId=? -Dversion=?]
//後面部分可選內容。如果不填,後續會提示填寫的。

$ mvn archetype:generate -DgroupId=cn.boz -DartifactId=boz-maven-plugin -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-plugin

這裡寫圖片描述

點選Configure
All Remote Catalog

這裡寫圖片描述

注意,如果是通過命令列建立,必須保證使用的mirror伺服器是aliyun ,或者是自己配置的URL指定的地址所在的私服。否則可能會找不到骨架報錯。

例如我們錄入

$ mvn archetype:generate -DgroupId=cn.boz -DartifactId=boz-maven-plugin -DarchetypeGroupId=org.codehaus.mojo.archetypes -DarchetypeArtifactId=webapp-javaee7

那麼就會去指定伺服器,尋找骨架。

[INFO] Archetype [org.codehaus.mojo.archetypes:webapp-javaee7:1.1 ->
 http://maven.aliyun.com/nexus/content/groups/public] found in catalog remote

關於war外掛的自定義配置

<plugins>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.2</version>
        <configuration>
            <!-- 指定webapp目錄下有哪些檔案是需要的,一旦需要的才會被打包過去。一般是** -->
            <warSourceIncludes>
                **
            </warSourceIncludes>
            <webResources>
                <resource>
                    <directory>src/sit/lib/</directory>
                    <!-- 指定打包到的目標的目錄 -->
                    <targetPath>WEB-INF/lib/</targetPath>
                    <include>*.jar</include>
                </resource>
            </webResources>
        </configuration>
    </plugin>
</plugins>

這裡寫圖片描述

關於Maven 執行jar:jar 之後,打包檔案無xml

<resources>
    <resource>
        <directory>src/main/java</directory>
        <includes>
            <include>**/*.js</include>
            <include>**/*.css</include>
            <include>**/*.properties</include>
            <include>**/*.xml</include>
            <include>**/*.eot</include>
            <include>**/*.svg</include>
            <include>**/*.ttf</include>
            <include>**/*.woff</include>
            <include>**/*.woff2</include>
            <include>**/*.png</include>
        </includes>
        <excludes>
            <exclude>aaa/fff/eef/console/xxx/sql/*</exclude>
        </excludes>
        <filtering>false</filtering>
    </resource>
    <resource>
         <directory>src/main/resources</directory>  
           <includes>  
               <include>**/*.properties</include> 
               <include>**/*.xml</include>  
           </includes>  
           <filtering>false</filtering>  
    </resource>
</resources>

附錄