Maven——自定義結構打WAR包
阿新 • • 發佈:2020-12-08
文章轉載: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