1. 程式人生 > 實用技巧 >Maven——自定義結構打WAR包

Maven——自定義結構打WAR包

文章轉載https://www.cnblogs.com/alfredinchange/p/14031354.html


1 目標

將專案編譯完成的內容和本地的檔案通過自定義的目錄結構打包成war包。

2 程式結構

分為四個專案,packagewar-webapp、packagewar、demo01、demo02,其中後兩者是空專案,只是為了作為jar包依賴使用。
packagewar 是 pom 專案,用於執行 maven package 打包,打包完成後將在 packagewar-webapp 的 target 目錄下輸出 WAR 包。
packagewar-webapp 是打 WAR 包的輸出專案,包含自定義的 web 目錄結構如下。

packagewar-webapp
  ∟ src
      ∟ main
          ∟ webapp
              ∟ WEB-INF
                  ∟ lib
                      ∟ debug
                      ∟ deploy
                      ∟ doc
                          ∟ README.md
                      ∟ lib
                      ∟ log
                      ∟ temp
                  ∟ web.xml
              ∟ index.jsp
  ∟ pom.xml

3 Maven 的 POM 指令碼

  • demo01(demo02類似)
<?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/xsd/maven-4.0.0.xsd">
    <modelVersion
>4.0.0</modelVersion> <groupId>com.alfred.maven</groupId> <artifactId>maven-demo01</artifactId> <version>1.0.0-SNAPSHOT</version> <description> 概述:用於maven專案研究的demo 作用:可用於配合其他專案進行操作 </description> </project>

  • packagewar
<?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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.alfred.maven</groupId>
    <artifactId>maven-packagewar</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <description>
        概述:【Maven技術研究】打war包
        目標:作為總體編譯打包的 pom 專案
    </description>
    <modules>
        <module>../com.alfred.maven.demo01</module>
        <module>../com.alfred.maven.demo02</module>
        <module>../com.alfred.maven.packagewar-webapp</module>
    </modules>
</project>

  • packagewar-webapp
<?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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.alfred.maven</groupId>
    <artifactId>maven-packagewar-webapp</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <description>
        概述:【Maven技術研究】打war包
        目標:將專案編譯完成的內容和本地的檔案通過自定義的目錄結構打包成war包
        1)demo01 -> 存放在web前臺的lib/debug/deploy目錄下
        2)demo02 -> 存放在web前臺的lib/debug/lib目錄下
        3)packagewar-webapp -> 打包的web專案
        4)保留web專案目錄結構不變,整合打包成一個war包PackageWar.war
    </description>

    <dependencies>
        <dependency>
            <groupId>com.alfred.maven</groupId>
            <artifactId>maven-demo01</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.alfred.maven</groupId>
            <artifactId>maven-demo02</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-clean-plugin</artifactId>
                <version>3.0.0</version>
                <executions>
                    <execution>
                        <id>auto-clean</id>
                        <phase>initialize</phase>
                        <goals>
                            <goal>clean</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.2</version>
                <executions>
                    <!-- 拷貝lib包下的依賴jar包 -->
                    <execution>
                        <id>copy-lib-dependencies</id>
                        <!-- 在 test-compile 階段執行 -->
                        <phase>test-compile</phase>
                        <goals>
                            <!-- 階段目標指定為拷貝依賴 -->
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <!-- 依賴包輸出到編譯路徑下的自定義目錄 -->
                            <outputDirectory>${project.build.directory}/${project.artifactId}/WEB-INF/lib/debug/lib/</outputDirectory>
                            <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>false</overWriteSnapshots>
                            <overWriteIfNewer>true</overWriteIfNewer>
                            <includeArtifactIds>maven-demo02</includeArtifactIds>
                        </configuration>
                    </execution>
                    <!-- 拷貝deploy包下的依賴jar包 -->
                    <execution>
                        <id>copy-deploy-dependencies</id>
                        <phase>test-compile</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/${project.artifactId}/WEB-INF/lib/debug/deploy/</outputDirectory>
                            <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>false</overWriteSnapshots>
                            <overWriteIfNewer>true</overWriteIfNewer>
                            <includeArtifactIds>maven-demo01</includeArtifactIds>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <!-- 專案輸出目錄 -->
                    <webappDirectory>${project.build.directory}/${project.artifactId}</webappDirectory>
                    <!-- WAR 包自定義名稱 -->
                    <warName>PackageWar</warName>
                    <!-- 是否包含空目錄,像日誌 log、臨時 temp 目錄 -->
                    <includeEmptyDirectories>true</includeEmptyDirectories>
                    <!-- 預設情況下使用 maven-war-plugin 會將依賴的 jar 包都放在 lib 目錄下,此處排除 -->
                    <packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

4 WAR包結構

PackageWar.war
  ∟ META-INF
    ∟ WEB-INF
        ∟ classes
        ∟ lib
            ∟ debug
            ∟ deploy
                ∟ maven-demo01-1.0.0-SNAPSHOT.jar
            ∟ doc
                ∟ README.md
            ∟ lib
                ∟ maven-demo02-1.0.0-SNAPSHOT.jar
            ∟ log
            ∟ temp
        ∟ web.xml
  ∟ index.jsp