2012-07-10 52 views
6

我們在那裏我們的UI項目使用EJB客戶的依賴,包括相當多的一羣業務服務的解決方案。 Maven的問題在於,即使客戶端.jar通常包含大約1-2個類,它們也會帶來整個服務應用程序的完整依賴堆棧。這可以得到一個有點難看,當的.ear文件開始成長到50-100Mb彈出有不時感謝討厭的錯誤無關的依賴偷偷自己的方式進入用戶界面應用程序。Maven的EJB客戶端生成依賴排除

當然,我們總是可以排除在客戶端的依賴關係,但後來我們都寫同樣的一堆使用這些服務線,以每個客戶的項目,這是一個很多不必要的重複。另外,人們會提出最奇怪的錯誤消息,並使用大量的時間來追蹤它們,然後記住提及它們包含了一些客戶端jar,而沒有檢查它帶入方程中的附加依賴關係。

例子:這只是一個服務客戶端被列入

 <dependency> 
      <groupId>fi.path.to.service</groupId> 
      <artifactId>customermanagement-common</artifactId> 
      <version>2.6</version> 
     </dependency> 
     <dependency> 
      <groupId>fi.path.to.service</groupId> 
      <artifactId>customermanagement-service</artifactId> 
      <classifier>client</classifier> 
      <exclusions> 
       <exclusion> 
        <groupId>fi.path.to.dependency</groupId> 
        <artifactId>internal-dependency-#1</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>org.codehaus.castor</groupId> 
        <artifactId>castor</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>fi.path.to.dependency</groupId> 
        <artifactId>internal-dependency-#2</artifactId> 
       </exclusion> 
       <exclusion> 
        <artifactId>internal-dependency-#3</artifactId> 
        <groupId>fi.path.to.dependency</groupId> 
       </exclusion> 
       <exclusion> 
        <artifactId>internal-dependency-#4</artifactId> 
        <groupId>fi.path.to.dependency</groupId> 
       </exclusion> 
       <exclusion> 
        <artifactId>internal-dependency-#5</artifactId> 
        <groupId>fi.path.to.dependency</groupId> 
       </exclusion> 
       <exclusion> 
        <artifactId>castor-xml</artifactId> 
        <groupId>org.codehaus.castor</groupId> 
       </exclusion> 
       <exclusion> 
        <artifactId>castor-codegen</artifactId> 
        <groupId>org.codehaus.castor</groupId> 
       </exclusion> 
       <exclusion> 
        <artifactId>castor-xml-schema</artifactId> 
        <groupId>org.codehaus.castor</groupId> 
       </exclusion> 
       <exclusion> 
        <artifactId>internal-dependency-#6</artifactId> 
        <groupId>fi.path.to.dependency</groupId> 
       </exclusion> 
      </exclusions> 
      <version>2.6</version> 
     </dependency> 

,試想有幾個不同的應用程序這幾條,你得到的圖片,編寫了所有的不包括每次都是很煩人和項目POM開始變得相當長。

我將標誌着作爲依賴提供,但也有不崩潰上運行時,如果它們不存在一對夫婦的依賴。說包含另一個服務調用的另一個應用程序與另一個外部的Exception類,這不是由於某種原因或另一個包裝在服務項目中的原因,如果不存在,將在運行時導致ClassNotFoundException。

因此,我知道可以通過在maven-ejb-plugin上使用pom.xml規範來從ejb客戶端生成期間排除/包含類,但是有什麼方法可以排除依賴關係嗎?

回答

1

似乎Maven,那麼不支持構建多個罐子出一個模塊的非常好。

因此,我們找到的唯一合理的方法是創建另一個模塊(將xxx服務分爲xxx服務和xxx服務客戶端),並將xxx服務客戶端模塊配置爲只有EJB客戶機/委託類&最小的依賴關係。這樣該項目可以通過一次執行來構建。

0

我在這裏有同樣的問題。我認爲一個解決方案可以使用配置文件,因爲每個配置文件,你可以指定依賴關係(見http://blog.sonatype.com/people/2010/01/how-to-create-two-jars-from-one-project-and-why-you-shouldnt/

在我而言,這是行不通的,因爲我需要同時生成JAR文件(EJB和EJB-客戶端)一次執行Maven。 :)

+0

面對類似的問題,開始改變項目是如何通過CI解決方案內置很可能將是一個大麻煩,成爲維修的問題,當他們從公司中所有其他應用程序具有不同的功能。 – t0mppa 2013-05-24 07:09:16