1. 程式人生 > >架構系列四:Maven實現動靜分離打war包及zip包

架構系列四:Maven實現動靜分離打war包及zip包

目標:實現Maven動靜分離打包,靜態資源打成zip包,動態資源打成war包,方便獨立部署

工程結構
打包前先看下工程結構
這裡寫圖片描述
我的靜態資源都是放在webapp目錄下面,有css,fonts,html,images,js,根目錄下的login.js,login.html,打包時需要將這些靜態資原始檔打成單獨的zip包,動態資源打成單獨的war包

打war包
pom.xml檔案內容如下

<build>
    <finalName>dp</finalName>
    <plugins>
        <plugin>
            <groupId
>
org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <useCache>false</useCache> <!--排除靜態資源 ,靜態資源單獨打包-->
<packagingExcludes> css/**,fonts/**,html/**,images/**,js/**,login.html,login.js </packagingExcludes> </configuration> </plugin> <plugins> <build>

這裡使用maven-war-plugin打war包,打包時,在packagingExcludes標籤中排除所有的靜態資原始檔,打出來的war包只有resource檔案檔案,jsp檔案,class檔案等,結構如下
這裡寫圖片描述

打靜態zip包
這裡使用maven-assembly-plugin外掛打zip包,打包之前,需要在src/main/assembly/路徑下增加static-zip.xml檔案,該檔案主要用來指定zip包中要包含有哪些靜態資原始檔,及靜態資原始檔的輸出目錄,static-zip.xml檔案內容如下:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"   
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 
                      http://maven.apache.org/xsd/assembly-1.1.0.xsd">          
    <id>dp-static</id>  
    <formats>  
        <!-- 輸出的檔案格式 -->
        <format>zip</format>  
    </formats>  
    <!-- 不包含根目錄,如果為true,會在我們生成的zip檔案結構中多出一層dp目錄 -->
    <includeBaseDirectory>false</includeBaseDirectory>  
    <fileSets>  
        <!-- 把圖樣式檔案輸出到css目錄下 -->
        <fileSet>  
            <directory>${project.basedir}/target/dp/css/</directory>  
            <outputDirectory>css</outputDirectory>  
        </fileSet>  
        <!-- 把字型檔案輸出到fonts目錄下 -->
        <fileSet>
            <directory>${project.basedir}/target/dp/fonts</directory>
            <outputDirectory>fonts</outputDirectory>
        </fileSet>
        <!-- 把靜態頁面輸出到html目錄下 -->
        <fileSet>
            <directory>${project.basedir}/target/dp/html</directory>
            <outputDirectory>html</outputDirectory>
        </fileSet>
        <!-- 把圖片輸出到images目錄下 -->
        <fileSet>
            <directory>${project.basedir}/target/dp/images</directory>
            <outputDirectory>images</outputDirectory>
        </fileSet>
        <!-- 把js檔案輸出到js目錄下 -->
        <fileSet>
            <directory>${project.basedir}/target/dp/js</directory>
            <outputDirectory>js</outputDirectory>
        </fileSet>
        <!-- 把login.js,login.html檔案輸出到根目錄下 -->
        <fileSet>
            <directory>${project.basedir}/target/dp/</directory>
            <includes>
                <include>login.js</include>
                <include>login.html</include>
            </includes>
            <outputDirectory>/</outputDirectory>
        </fileSet>
    </fileSets>
</assembly>

重點說下,為什麼這裡指定的是target目錄下呢,編譯完成後,在target目錄下會生成dp目錄(也就是你的工程名),在dp目錄下有編譯過後的所有檔案,包括靜態資原始檔因此zip包時,因此從target/dp目錄下取靜態資原始檔,target/dp目錄如下
這裡寫圖片描述

再來看下pom.xml檔案的配置

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2.1</version>
    <executions>
        <execution>
            <id>>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
            <configuration>
                <finalName>dp-static</finalName>
                <appendAssemblyId>false</appendAssemblyId>
                <descriptors>
                    <descriptor>src/main/assembly/static-zip.xml</descriptor>
                </descriptors>
            </configuration>
        </execution>
    </executions>
</plugin>

說明:
1.phase標籤:值為package,在打包時執行,打包前會先編譯並在target目錄下生成dp目錄,確保在打包時,能從target目錄下獲取到所有的靜態資原始檔
2.finalName標籤:自定義zip包名稱,打出來的zip檔名為dp-static
3.descriptor標籤:指定了上面新增的static-zip.xml檔案,打包時,會自動執行這個檔案生成zip檔案

執行maven install命令後,在target目錄下,生成了dp.war包,也生成了dp-static.zip包,如下
這裡寫圖片描述

最後附上完整的pom檔案的打包程式碼,如下

<build>
    <finalName>dp</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <useCache>false</useCache>
                <!--排除靜態資源 ,靜態資源單獨打包-->
                <packagingExcludes>
                    css/**,fonts/**,html/**,images/**,js/**,login.html,login.js
                </packagingExcludes>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.2.1</version>
            <executions>
                <execution>
                    <id>>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <finalName>dp-static</finalName>
                        <appendAssemblyId>false</appendAssemblyId>
                        <descriptors>
                            <descriptor>src/main/assembly/static-zip.xml</descriptor>
                        </descriptors>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    <plugins>
<build>