war包即對WEB應用程序進行打包,用於應用容器的部署。如在jboss中只要把war包丟入deploy目錄下即可發布自己的應用了。打包方式有很多中,很多工具本身就支持此功能。下面主要介紹通過maven來操作的兩種方式:
方法一:
即第一反應的那種啦,就是利用maven的maven-war-plugin。
<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目錄等等。
可以在需要打包的工程中直接設定:<pom>war</pom>
這樣在install的時候就會對此工程生成相應配置的war包,原來此web工程依賴的其他工程全部會以jar包的形式出現在lib目錄下,所以不需要再去關心war包中集成的jar包是否完整,maven已經幫你做完了。
順便提一句,在jboss中發布war包,如果包中包含log4j.jar,會報錯,所以在本例中將此jar包排除在外。
方法二:
不用war插件,而是用到另外三個插件:maven-dependency-plugin 、maven-antrun-plugin 、 build-helper-maven-plugin
下面分別說明下着三個插件在此過程扮演的角色:
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工程,再依賴工程,通過第一種方式同樣可以達到最終的結果。看個人喜好了。
