2012-05-31 40 views
1

我有一個多模塊web應用程序與maven建設。我們按照常規構建戰爭,並使用tomcat在開發人員機器和本地測試服務器上部署和運行。定製的maven可部署(戰爭與一些依賴關係刪除)

然後我們想要將應用程序部署到雲中。爲了做到這一點,我們創建了一個特殊版本的tomcat,其中包含所有預加載的庫以及僅包含我們代碼的特殊版本的war。這裏指的是tomcat預裝在雲端服務器上,每次更換時都會上傳戰爭。目前我們不得不從構建的戰爭中手動刪除依賴關係。

maven做這件事的最好方法是什麼?我應該建立一個自定義的包裝類型,或者運行一些後期構建插件來消除這些戰爭?或者是其他東西?我認爲激活此自定義構建的最佳方式是通過配置文件。我試圖通過在新配置文件中將這些依賴項設置爲scope = provided來消除這些依賴關係,但傳遞依賴關係仍然使其成爲戰爭。

回答

1

如果要排除所有依賴,您可以用戰爭插件的packagingExcludes這樣做:

<plugin> 
     <artifactId>maven-war-plugin</artifactId> 
     <version>2.2</version> 
     <configuration> 
      <packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes> 
      ... 
     </configuration> 
    </plugin> 

指定配置文件裏面這個插件只能執行它的生產。

+0

是的,謝謝,這是完美的。我可以過濾/依賴關係。這就是我所做的。 –

1

你可以在maven中使用配置文件來實現。正如你所說的,它不起作用,我可以想象你配置了錯誤的東西。嘗試是這樣的:

<profiles> 
    <profile> 
     <id>dev</id> 
     <activation> 
     <!-- active by default, turn off when on prod --> 
     <activeByDefault>true</activeByDefault> 
     </activation> 
     <dependencies> 
     <!-- include this in dev, not in prod --> 
     <dependency> 
      <groupId>com.company</groupId> 
      <artifactId>xyz</artifactId> 
     </dependency> 
     </dependencies> 
    </profile> 
    </profiles> 

然後在命令行中,mvn package -P !dev停用dev輪廓,使得不包括罐。

確保com.company:xzy未包含在<project><dependencies></dependencies></project>中。