2012-03-01 122 views
3

我正在使用Maven 3來處理(大)項目。該項目使用Scala,Akka和Spray框架定義了一套REST服務。每個服務都被定義爲一個獨立的項目,由於使用了「mvn package」命令而產生了一個WAR。Maven在編譯時如何處理WAR依賴關係?

我必須將這些不同的服務「集合」到一個「系統」中,也就是將這些服務的一個子集用於特定目的的單個WAR中。作爲第一印象,Maven WAR疊加效果很好:只需創建一個新項目,然後添加要作爲依賴包含的服務。

<dependencies> 
    <dependency> 
    <groupId>net.modelbased.sensapp.service</groupId> 
    <artifactId>net.modelbased.sensapp.service.metamodel.repository</artifactId> 
    <version>0.0.1</version> 
    <type>war</type> 
    </dependency>  
</dependencies> 

它運行良好,並且獨立服務中包含的類包含在最終的WAR中。

jar tf target/net.modelbased.sensapp.system.envision-0.0.1-SNAPSHOT.war 
[...] 
WEB-INF/classes/net/modelbased/sensapp/service/metamodel/repository/ModelLister.class 
[...] 

但是...... Spray框架需要執行引導程序,也就是加載已實現服務的類。這個文件必須被編譯,因爲它是一個普通的scala類。但是它看起來像maven在編譯類路徑中沒有包含WAR依賴關係。

我看到了WARpath插件(http://static.appfuse.org/maven-warpath-plugin/)......但它看起來沒有多少過時。是否有一種「標準」方式來做我想做的事情(即,在編譯類路徑中包含一個WAr)。

Ps。該項目的要求之一是每個服務都必須作爲獨立的工件進行部署。解決方案可以是將服務的核心作爲JAR項目來實現,並且還提供一個WAR項目,其中包括JAR和相關配置文件的兼容性。但它會乘以2的項目數定義,這是不是最佳的方式...

回答

0

你提出的解決方案看起來不錯。

你可以從你的類中構建一個jar,然後使用這個jar作爲依賴來構建一個war。

你可能也可以在一個單一的項目中做到這一點,我可以看到不需要兩個不同的項目。

0

您可以使用maven-war-plugin的配置,該配置爲您提供了一種方法,可以從src/main/java文件中創建單獨的jar文件。 你要添加的配置項:

<configuration> 
    <archiveClasses>true</archiveClasses> 
    <attachClasses>true</attachClasses> 
    </configuration> 

這將創建一個單獨的jar文件與分類它可以作爲一個通常的依賴。