maven生成war包的兩種方式

  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工程,再依賴工程,經過第一種方式一樣能夠達到最終的結果。看我的喜愛了。

相關文章
相關標籤/搜索