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

信步漫談之Maven——自定義結構打WAR包

1 目標

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

2 程式結構

分為三個專案,packagewar-webapp、demo01、demo02,其中後兩者是空專案,只是為了作為jar包依賴使用。
packagewar-webapp 是打包主程式,包含自定義的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-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>
                    <execution>
                        <id>copy-lib-dependencies</id>
                        <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>
                    <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>
                    <warName>PackageWar</warName>
                    <includeEmptyDirectories>true</includeEmptyDirectories>
                    <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