war包即對WEB應用程序進行打包,用於應用容器的部署。如在jboss中只要把war包丟入deploy目錄下便可發佈本身的應用了。打包方式有不少中,不少工具自己就支持此功能。下面主要介紹經過maven來操做的兩種方式:web
方法一:apache
即第一反應的那種啦,就是利用maven的maven-war-plugin。app
<build> <plugins> ...... <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.0.2</version> <configuration> <warSourceExcludes>WEB-INF/lib/log4j-${log4j.version}.jar</warSourceExcludes> </configuration> </plugin> </plugins> </build>
固然你能夠指定war包的名稱,輸出的目錄,webapp目錄等等。dom
能夠在須要打包的工程中直接設定:<pom>war</pom>webapp
這樣在install的時候就會對此工程生成相應配置的war包,原來此web工程依賴的其餘工程所有會以jar包的形式出如今lib目錄下,因此不須要再去關心war包中集成的jar包是否完整,maven已經幫你作完了。maven
順便提一句,在jboss中發佈war包,若是包中包含log4j.jar,會報錯,因此在本例中將此jar包排除在外。工具
方法二:ui
不用war插件,而是用到另外三個插件:maven-dependency-plugin 、maven-antrun-plugin 、 build-helper-maven-pluginspa
下面分別說明下着三個插件在此過程扮演的角色:操作系統
maven-dependency-plugin :至關於數據收集器,該依賴那些jar包,該加載那些resource信息。
maven-antrun-plugin:完成收集完文件夾的壓縮和包的重命名。
build-helper-maven-plugin:讓壓縮包擁有男人本色,oh sorry 是war本色。
在寫pom.xml配置前,先說明下目錄結構
root
|
|---template
|
|---wardir
其中這兩個目錄都做爲maven的獨立工程,下面要寫配置在wardir下的pom.xml中
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.0</version> <executions> <execution> <id>create-structure</id> <phase>process-resources</phase> <goals> <goal>unpack</goal> </goals> <configuration> <artifactItems> <artifactItem> <groupId>GROUPID</groupId> <artifactId>template</artifactId> </artifactItem> </artifactItems> <outputDirectory> ${project.build.directory}/${assembly.name}.war </outputDirectory> </configuration> </execution> <execution> <id>copy-libs</id> <phase>process-resources</phase> <goals> <goal>copy</goal> </goals> <configuration> <artifactItems> <artifactItem> <groupId>jdom</groupId> <artifactId>jdom</artifactId> </artifactItem> ...... </artifactItems> <outputDirectory>${project.build.directory}/${assembly.name}.war/WEB-INF/lib</outputDirectory> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.3</version> <executions> <execution> <id>copy-config</id> <phase>process-resources</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <copy todir="${project.build.directory}/${assembly.name}.war"> <fileset dir="src/main/resources" /> </copy> <zip destfile="${project.build.directory}/${assembly.name}-${project.version}-war.zip"> <zipfileset dir="${project.build.directory}/${assembly.name}.war" includes="**\*.*" excludes="*.zip" /> </zip> <copy file="${project.build.directory}/${assembly.name}-${project.version}-war.zip" tofile="${project.build.directory}/${assembly.name}-${project.version}.war" /> </tasks> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>1.4</version> <executions> <execution> <id>attach-artifacts</id> <phase>package</phase> <goals> <goal>attach-artifact</goal> </goals> <configuration> <artifacts> <artifact> <file>${project.build.directory}/${assembly.name}-${project.version}.war</file> <type>war</type> </artifact> </artifacts> </configuration> </execution> </executions> </plugin> </plugins> </build>
固然這種方式也能夠用來打war包。對於打無頁面操做系統的war包,我的認爲用後者更靈活,固然創建假web工程,再依賴工程,經過第一種方式一樣能夠達到最終的結果。看我的喜愛了。