2017-02-11 60 views
6

我處於需要從多模塊maven項目中構建胖罐子的情況。該項目是基於Selenium/cucumber API的。從多模塊maven項目構建單個胖罐子 - 包括測試類別

我的項目結構如下

Parent -- pom 
    | 
    |__core_module src/main/java --> helper classes for selenium 
    | 
    |__acme_module src/main/test --> Test Classes for acme project 

我已經嘗試了不同的方式來建立一個「acme_test.jar」,其中包括core_module + acme_module.But沒有人幫助我。

非常感謝任何線索來解決這個問題。

感謝

+0

過濾器是真的不清楚你想在這裏做。什麼是'acme_test.jar',什麼是'acme_module'等等,它們究竟包含什麼,它們是如何相關的......? – Tunaki

+0

這是所有關於建立一個硒測試用例的助手框架說acme。 core_module將保存selenium的所有幫助程序和實用程序類,並且acme_module將保存「acme」的測試類。我們正在嘗試的是從這兩個模塊(具有所有依賴關係)構建一個胖jar(可執行文件 - core_module + acme_module = acme_fat_test.jar)給一個不熟悉技術的客戶端,以避免相關的設置。 – kallada

+0

你的意思是'src/test/java'?這是'src/main/test'是否正確? – MariuszS

回答

3

作爲@MariuszS提到,首先重構您的項目,以便爲測試(=驅動器/驗證導航)Acme的實際類分離任何單元測試或集成測試。

Parent -- pom 
    | 
    |__core_module src/main/java --> helper classes for selenium 
    | 
    |__acme_module src/main/java --> Classes specific for navigating acme 
    | 
    |__acme_module src/test/java--> (Unit etc) Test Classes for acme project 

然後,您需要acme_module來將core_module作爲依賴項來包含。

最後,在acme_module,把這個在您的構建插件部分:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-shade-plugin</artifactId> 
    <version>2.4.3</version> 
    <executions> 
     <execution> 
      <id>create-fat-jar</id> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
      <configuration> 
       <transformers> 
       <!-- add Main-Class to manifest file --> 
        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
         <mainClass>your.main.class</mainClass> 
        </transformer> 
       </transformers> 
        <finalName>YourJarName</finalName> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

您也可以明確地包括core_module通過添加包括在插件配置部分

+0

當然,核心模塊也應該在_core_module/src/test/java_下進行測試。 – kriegaex

+2

或者,如果您不希望模塊在陰影罐內解壓縮,則可以使用[onejar-maven-plugin](https://code.google.com/archive/p/onejar-maven-plugin/),以便創建一個超級JAR的嵌套JAR,也就是說有一個特殊的類加載器直接從超級JAR加載未改變的JAR。也可以通過[this fork](https://github.com/jolira/onejar-maven-plugin)在Maven Central上獲得。如果你(卡拉達)想知道更多關於它的信息,並且我有機會接受它作爲答案,請告訴我,我會準備一個答案。但Maven Shade也會做這個工作,這個答案是正確的。 – kriegaex

+0

抱歉,由於某些個人原因,傢伙無法及時回覆您。 – kallada

4

配置acme_module脂肪模塊 - 該模塊應該生成可執行的JAR脂肪具有所有依賴性。

添加core_moduleacme_module作爲依賴。

將您的測試類從src/test/java移動到src/main/java,因爲此類應該是可執行的。如果你有測試(如junit),那麼把這個類留在test目錄中,但是可執行部分應該保留在main