1

我使用maven-assembly-plugin在[app-root]/target/my-project-war下創建一個war文件。如何解壓這個war文件,使其成爲像[app-root]/war這樣的應用程序根目錄下的文件夾?在Maven清理包後打開war文件

我想要war文件夾而不是target/** .war的原因是我可以使用mvn gae:deploy直接部署到應用引擎。 gae:deploy來自maven-gae-plugin,它的確認只允許我指定appDir,而不是war文件。

的pom.xml

<plugin> 
    <groupId>net.kindleit</groupId> 
    <artifactId>maven-gae-plugin</artifactId> 
    <version>${gae.plugin.version}</version> 
    <configuration> 
      <unpackVersion>${gae.version}</unpackVersion> 
      <serverId>appengine.google.com</serverId> 
      <sdkDir>${gae.home}</sdkDir> 
      <appDir>${basedir}/war</appDir> 
      <splitJars>true</splitJars> 
    </configuration> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.2.1</version> 
    <configuration> 
     <appendAssemblyId>false</appendAssemblyId> 
     <descriptors> 
       <descriptor>${basedir}/assembly-war.xml</descriptor> 
     </descriptors> 
    </configuration> 
    <executions> 
     <execution> 
       <id>make-assembly</id> 
       <phase>package</phase> 
       <goals> 
        <goal>single</goal> 
        </goals> 
     </execution> 
    </executions> 
</plugin> 

組裝war.xml

<assembly> 
    <id>war</id> 

    <formats> 
     <format>war</format> 
    </formats> 

    <includeSiteDirectory>false</includeSiteDirectory> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <fileSets> 
    ... 
    </fileSets> 
    <dependencySets> 
    </dependencySets> 
</assembly> 

這裏是我的項目文件夾。 War文件夾以粗體顯示。

$ ls -l test-maven-play-plugin/ 
total 24 
drwxr-xr-x 5 angeloh staff 170 Jan 25 21:45 app 
[email protected] 1 angeloh staff 2962 Jan 25 23:58 assembly-war.xml 
drwxr-xr-x 6 angeloh staff 204 Jan 25 21:46 conf 
drwxr-xr-x 26 angeloh staff 884 Jan 25 22:42 lib 
[email protected] 1 angeloh staff 7380 Jan 26 00:05 pom.xml 
drwxr-xr-x 4 angeloh staff 136 Jan 26 00:04 precompiled 
drwxr-xr-x 5 angeloh staff 170 Jan 25 21:45 public 
drwxr-xr-x 9 angeloh staff 306 Jan 26 00:04 target 
drwxr-xr-x 6 angeloh staff 204 Jan 25 22:11 test 
drwxr-xr-x 3 angeloh staff 102 Jan 25 22:15 test-result 
drwxr-xr-x 2 angeloh staff 68 Jan 26 00:04 tmp 
drwxr-xr-x 3 angeloh staff 102 Jan 25 22:10 **war** 

---------------------- [UPDATE] ------------------ ----

有點小進步。如果我做這些改變:

的pom.xml

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    ...... 
    <configuration> 
     ...... 
     <outputDirectory>${basedir}/war</outputDirectory> 
    </configuration> 
    ...... 
</plugin> 

組裝war.xml

<assembly> 
    <id>war</id> 

    <formats> 
     <format>dir</format> 
    </formats> 
    ...... 
</assembly> 

戰爭的內容將輸出到戰爭/測試播放1.0.0。但是,我希望它直接參戰,而不是war/test-play-1.0.0。

---------------------- [UPDATE] --------------------- -

最後,在我做出這些更改後,它適用於我。

的pom.xml

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    ...... 
    <configuration> 
     ...... 
     <outputDirectory>${basedir}</outputDirectory> 
     <finalName>war</finalName> 
    </configuration> 
    ...... 
</plugin> 
+0

你爲什麼這樣做?項目類型戰爭涵蓋大多數情況。 –

+0

我編輯問題的原因。 – angelokh

+0

在戰爭項目上調用包階段時,它首先在目標目錄中創建一個包含戰爭內容的目錄,然後創建戰爭文件。你不能使用那個目錄嗎? –

回答

0

Maven的戰爭,插件首先構建Web應用程序到目錄中。默認情況下,該目錄是${project.build.directory}/${project.build.finalName}(請參閱webappDirectory配置屬性)。

maven-gae-plugin從解壓後的戰爭中部署。默認情況下,它是同一目錄。 (參見其appDir配置屬性)

所以,你應該只是能夠運行:

mvn clean package gae:deploy 

如果你有這樣的問題,你可以考慮使用戰爭:就地目標,這將複製類文件和資源到src/main/webapp/WEB-INF/classes以及依賴到src/main/webapp/WEB-INF/lib中。

+1

呃,這看起來不正確:如果你使用一堆覆蓋和排除,你會發現它們出現在webAppDirectory中,但不是最終的戰爭。 –