2011-09-21 63 views
1

有沒有辦法收拾了行家的EJB項目的依賴與最終的罐子?行家EJB項目 - 包依賴

我通常使用一個單獨的耳朵項目,包括EJB作爲依賴 - 它會自動填寫lib文件夾這樣。然而,這似乎有點浪費 - 只有一個項目才能建立耳朵。

現在我有:

<artifactId>projectname</artifactId> 
<version>1.0.0-SNAPSHOT</version> 
<packaging>ejb</packaging> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-ejb-plugin</artifactId> 
      <version>2.3</version> 
      <configuration> 
       <ejbVersion>3.1</ejbVersion> 
       <archive> 
        <manifest> 
         <addClasspath>true</addClasspath> 

         <!-- without this, the datetime stamp unique id's will be appended to classpath items --> 
         <!-- see: http://maven.apache.org/shared/maven-archiver/examples/classpath.html#Snapshot --> 
         <useUniqueVersions>false</useUniqueVersions> 
        </manifest> 
       </archive> 
      </configuration> 
     </plugin> 

我是否需要設置的包裝類型的耳朵?我可以在獨立的ejb jar中包含傳遞依賴嗎?如果我將它設置爲耳朵,我該如何配置耳塞?

在此先感謝!

回答

3

Maven Shade Plugin可以與Jar包的依賴關係。它將從所有項目的依賴中提取類/資源,並將它們與最終的JAR一起打包。

這應該足以打包所有的依賴關係:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-shade-plugin</artifactId> 
    <version>1.4</version> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

有缺點這樣做,但是。

  • 在不同JAR中具有相同名稱的多個資源可能會導致問題(例如/ META-INF/services/...)。你可以使用Shade的資源變換器,但它可能會變得混亂。
  • 不容易追蹤哪些JAR文件在你的項目依賴一旦部署(你不得不向後引用POM,而不是僅僅看EAR)。

除非你有充分的理由不這樣做,否則我建議你堅持建立一個EAR。

+0

嗯,有趣的+1可以設置的項目包裝耳朵,但隨後的模塊是奇怪的 - 我想我可能不得不手工創建application.xml中,否則它似乎工作的小費好,謝謝 – javamonkey79

0

我不認爲有這樣做的直接方式。相反,可以做什麼是將它創建爲一個模塊項目與耳朵和ejb模塊。這不完全是我想要的,但它的工作原理,比單獨的項目更好。