1. 程式人生 > >maven合併打包多個war包

maven合併打包多個war包

在WAR外掛的以往版本中,配置並不總是必須的。如果你覺得使用預設設定能很好滿足要求,那就繼續這麼做。但是如果你需要更多的控制,那麼你就歹好好看看下面的部分了。

<overlay>元素包含有下列子元素:

  • id -  overlay id。如果你不提供的話,WAR外掛將自動生成一個。
  • groupId -  配置你想要覆蓋的groupId。
  • artifactId – 配置你想要覆蓋的構件的artifactId。 
  • type – 配置你想要覆蓋的構件型別。預設值是:war。
  • classifier – 如果有多個構件匹配當前的groupId/artifactId,那麼你需要配置構件的classifier以明確覆蓋(classifier:該元素用來幫助定義構建輸出的一些附屬構件)。
  • includes -  要包含的檔案。預設情況下,所有檔案都能被包含。  
  • excludes – 要排除的檔案。預設情況下,在META – INF目錄是被排除在外的。
  • targetPath -  在webapp結構的目標相對路徑,當然這隻在覆蓋型別為war時才有效。預設情況下,覆蓋的內容都追加在webapp的根節點下。
  • skip – 當設定為true時,跳過本次覆蓋。預設值是:false。

說了這麼多,還是舉例項會比較直觀一點。

比如,我要排除我們的documentedprojectdependency.war下的sampleimage-dependency.jpg來覆蓋目標war檔案:

  …
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <overlays>
            <overlay>
              <groupId>com.example.projects</groupId>
              <artifactId>documentedprojectdependency</artifactId>
              <excludes>
                <exclude>WEB-INF/classes/images/sampleimage-dependency.jpg</exclude>
              </excludes>
            </overlay>
          </overlays>
        </configuration>
      </plugin>
    </plugins>
  </build>
  …

4、Overlays的打包

Overlays採用第一直達者優先的策略(因此,如果一個檔案被某一個副本覆蓋過,則它不會被另一個副本繼續覆蓋)。

Overlays的應用步驟依照它們在<overlays>配置的順序。如果沒有指定配置,那麼它們的依賴關係將按照POM定義的順序來呼叫(警告:這有很多的不確定性,特別是在您使用傳遞性依賴來覆蓋的時候)。如果當前專案運用了複合覆蓋的情況(即同時包含配置型覆蓋和非配置型覆蓋),非配置型覆蓋應用於配置型覆蓋之後。

預設情況下,該專案源(亦稱當前構建)遵循按pom.xml上下文中依賴的先後順序進行追加(如任何覆蓋元素已被應用之前)。當前構建定義了一個沒有groupId和artifactId的特殊覆蓋方式。如果overlays需要應用第一(直達者優先)原則,那麼就只需簡單地配置當前構建在這些覆蓋之後。

例如,假設groupid為com.example.projects的my-webapp是當前專案的一個依賴,而你需要首先應用它,操作如下:

  …
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <overlays>
            <overlay>
              <groupId>com.example.projects</groupId>
              <artifactId>my-webapp</artifactId>
            </overlay>
            <overlay>
              <!– 空 groupId/artifactId代表當前構建 –>
            </overlay>
          </overlays>
        </configuration>
      </plugin>
    </plugins>
  </build>
  …

注意:在上述情況下,沒有配置在<overlays>元素的其它WAR依賴都會應用在當前構建之後。

如果你想要執行一項更好更精細的覆蓋策略,overlays能通過不同的includes/exclude元素進行多重打包。例如,我想要在當前專案中使用my-webapp的 index.jsp覆蓋檔案,但是my-webapp的其它檔案還是按照常規方式來控制,鑑於此,我們必須要為 my-webapp定義兩個覆蓋配置:

  …
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <overlays>
            <overlay>
              <id>my-webapp-index.jsp</id>
              <groupId>com.example.projects</groupId>
              <artifactId>my-webapp</artifactId>
              <includes>
                <include>index.jsp</include>
              </includes>
            </overlay>
            <overlay>
              <!– 空 groupId/artifactId代表當前構建 –>
            </overlay>

<!– 如果有必要的話,就把其它overlays配置在這裡 –>

<overlay>
              <id>my-webapp</id>
              <groupId>com.example.projects</groupId>
              <artifactId>my-webapp</artifactId>
            </overlay>
          </overlays>
        </configuration>
      </plugin>
    </plugins>
  </build>
  …

 5、Overlay全域性設定

下面的設定能指定全域性性的Overlay和修改所有Overlay的應用方式。

  • dependentWarIncludes -  設定此包含預設值適用於所有的overlay。沒有指定includes元素的overlay都將繼承此預設設定。

    …
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <dependentWarIncludes>**/IncludeME,**/images</dependentWarIncludes>
        </configuration>
       </plugin>
    </plugins>
    …

  • dependentWarExcludes -  設定此排除預設值適用於所有的overlay。沒有指定excludes元素的overlay都將繼承此預設設定。

    …
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <dependentWarExcludes>WEB-INF/web.xml,index.*</dependentWarExcludes>
        </configuration>
       </plugin>
    </plugins>
    …

  • workDirectory – 設定overlays臨時提取的目錄。

    …
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <!– default value is target/war/work –>
          <workDirectory>/tmp/extract_here</workDirectory>
        </configuration>
       </plugin>
    </plugins>
    …

  • useCache – 設定true時,能啟用webapp架構快取。預設值:false。

    …
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <useCache>true</useCache>
        </configuration>
       </plugin>
    </plugins>
    …

6、ZIP依賴的覆蓋

要想使一個zip依賴作為一個覆蓋,你必須在外掛配置中指定它。例如你要在Web應用的scripts目錄下通過一個zip覆蓋注入內容,操作如下:

    …
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <overlays>
            <overlay>
              <groupId>zipGroupId</groupId>
              <artifactId>zipArtifactId</artifactId>
              <type>zip</type>
              <targetPath>scripts</targetPath>
            </overlay>
          </overlays>
        </configuration>
      </plugin>
    </plugins>
    …

三、參考資料

1、http://maven.apache.org/plugins/maven-war-plugin-2.1-alpha-2/overlays.html

2、http://maven.apache.org/plugins/maven-war-plugin/overlays.html

相關推薦

maven合併打包war

在WAR外掛的以往版本中,配置並不總是必須的。如果你覺得使用預設設定能很好滿足要求,那就繼續這麼做。但是如果你需要更多的控制,那麼你就歹好好看看下面的部分了。 <overlay>元素包含有下列子元素: id -  overlay id。如果你不提供的話,W

Vue.js中用webpack合併打包元件並實現按需載入

對於現在前端外掛的頻繁更新,所以多多少少要對元件化有點了解,下面這篇文章主要給大家介紹了在Vue.js中用webpack合併打包多個元件並實現按需載入的相關資料,需要的朋友可以參考下。   前言 隨著移動裝置的升級、網路速度的提高,使用者對於web應用的要求越來越高,web

war打成ear部署was

1.建立打包目錄,本人在桌面建立package資料夾,後在package資料夾下建立META-INF目錄,並在改目錄下建立application.xml。 2.將各war包放入package資料夾下 3.編寫application.xml檔案 每個<module&

Android Studio 一個工程打包不同名的APK

公司最近有個特別的需求,同一套程式碼,稍做修改(如包名不一樣,圖示不一樣,應用名不一樣等),編譯出幾個不同的應用。剛好用AS重構完專案,在網上查閱了一些資料,終於搞定!!在這記錄一下。 AS主要是利用gradle來實現這個需求的,具體做法如下: 修改ap

使用maven整合web專案,war合併

              再執行mvn package -f pom-all.xml 即可<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" x

maven 一次打包maven專案

maven 一次打包多個maven專案。 使用場景 一個專案由多個子專案組成,每個子專案也是一個maven專案。每次打包需要打包每個子專案,很麻煩,其實可以通過配置一個頂級的pom.xml檔案來解決這個問題,只需要打包頂層的maven專案,即可。如果一個專案有多個子專案的pom.

jar合併成一個jar

Ant方式注意:ant預設執行build.xml檔案,這個檔案到目前為止是不存在的 需要我們建立。如果不想命名為build.xml,執行時可以使用 ant -buildfile test.xml 命令指明要執行的構建檔案。注意:把你需要合併的jar包 和 build.xml

android studio如何匯出jar以及如何將jar合併

android studio現在jar包方式的引用可能越來越少,大部分都是通過gradle引入github專案依賴即可,不過今天還是講一講jar包的匯出和合並,算是記錄下吧。一、建立一個新的library專案,專案名為mylibrary。找到build.gradle檔案,檔案

jar合併為一個jar的方法

做法很簡單,其實jar檔案就是壓縮檔案,裝了win rar/zip的話就好辦了。 1、選中多個jar檔案,點右鍵“解壓到……”某個目錄,這時候應該會有些檔案重疊,主要是MANIFEST.MF,不管它,解壓完畢,把合併的資訊填入MANIFEST.MF或者寫個readme,隨便你

一鍵打包不同名,不同應用名稱和圖示的APK

此Demo的原理與多渠道打包的原理相同(動態設定App名稱,應用圖示,替換常量,更改包名,變更渠道)最近有一個需求,就是一套程式碼要根據不同的客戶打包出不同包名,不同appName,圖示的apk,如果一個客戶更改一次打包出一個apk的話效率非常的低,並且不利於維護本demo

將引用的jar通過MANIFEST.MF打包成一個jar

1、新建一個MANIFEST.MF檔案,這裡我引用到一個外部jar包: Manifest-Version: 1.0 Class-Path: lib/jna-3.5.1.jar Main-Class:

如何將JAR合併並混淆

一步一步教你如何匯出JAR包後將多個JAR包合併,並混淆 匯出JAR包: 在eclipse中,右鍵工程,點選export,選擇Jar file,選則需要打包的工程,將工程內除src,lib,以外的檔

Maven打包期依賴war/Zip 並解壓至指定目錄的pom配置

首先配置依賴,引入需要依賴的war包和zip包: <dependency> <groupId>com.huawei.mateinfo</groupId> <artifactId>kewen-common-w

46、Maven建立模組專案(war,2017版Eclipse Neon.2)

執行環境: 2017年3月 Eclipse Neon.2 Apache Maven 3.3.9 jdk1.8 注意,此文跟網上所有的建立maven專案有所不同, 就是都會勾選 create a simple project,網上的都是不勾選的。下面就不額外提出了。 首先

Maven實戰(五)---兩war的呼叫

開篇前提      1、為什麼要用兩個war包的呼叫? 因為我們Maven專案每個war包都是一條線,前臺用easyui,而每一條線都要引用easyui相關的js、css,還有一些其他的樣式。為了把

ant單個或渠道打包參考文件

操作方法: 1、   單個渠道包 1、下載ant,並配置環境變數 並且配置AndroidSDKTools環境變數 2、測試ant以及android命令是否安裝成功,下圖表明已安裝成功 3、build.xml和 local.properties目錄自動生成 執行cm

MVC 下 打包word到壓縮

情況 ron lena ram lse .sql add 報告 length 第一步 引入dll 控制器代碼 /// <summary> /// 導出Word表格 /// </summary>

android jar打包成一個

task makeJar(type: Jar){ archivesBaseName = 'lib' from(pr

maven一鍵部署tomcat war(轉載)

install pom.xml password 一次 輸出 group 通過 cli con 1、環境如下   eclipse、apache-maven-3.0.5、apache-tomcat-7.0.39 2、配置如下   apache-tomcat-7.0.39配

eclipse使用maven install 命令,生成war中沒有jsp/js/css的解決方法

bsp 文件中 添加 direct pid 路勁 pom.xml文件 lips 命令 在pom.xml文件中添加如下11行代碼就可以了。 <build> <plugins> <plugin>