信步漫談之Maven——自定義結構打WAR包
阿新 • • 發佈:2020-11-24
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