2017-02-11 25 views
6

Jestem w sytuacji, w której muszę zbudować słoik z wielowarstwowego projektu maven. Projekt jest zbudowany w oparciu o API Selenium/Ogórek.Budowanie pojedynczego słoika z projektu z wieloma modułami - w tym klasy testowe

Struktura mojego projektu jest następujący

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

Próbowałem różnych sposobów, aby zbudować „acme_test.jar”, ​​który obejmuje core_module + acme_module.But żaden z nich nie pomógł mi.

Bardzo doceniamy każdą wskazówkę, aby rozwiązać ten problem.

Dzięki

+0

Jest bardzo jasne, co cię chcesz tu zrobić. Co to jest 'acme_test.jar', czym jest' acme_module' i reszta, co dokładnie zawierają, w jaki sposób odnoszą się ...? – Tunaki

+0

Chodzi o to, aby zbudować ramy pomocnicze dla przypadków testowych selenu, powiedzmy, dla acme. Moduł core_module będzie zawierał wszystkie klasy pomocnicze i użytkowe dla selenu, a acme_module będzie przechowywać klasy testowe dla "acme". Próbujemy zbudować słoik (plik wykonywalny - core_module + acme_module = acme_fat_test.jar) z tych dwóch modułów (ze wszystkimi zależnościami), aby nie ten doświadczony klient, aby uniknąć powiązanej konfiguracji. – kallada

+0

Masz na myśli 'src/test/java'? Czy to 'src/main/test' jest poprawne? – MariuszS

Odpowiedz

3

Jak wspomina @MariuszS, najpierw zrestrukturyzuj swój projekt, aby oddzielić testy jednostek lub testy integracyjne od rzeczywistych klas, które testują (= dysk/weryfikacja nawigacji) 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 

Następnie potrzebujesz acme_module aby zawierać core_module jako zależność.

Wreszcie w acme_module, umieścić to w swojej budowie wtyczek odcinku:

<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> 

Można również wyraźnie obejmować core_module przez dodanie zawierać filtr w sekcji konfiguracji wtyczki

+0

I oczywiście moduł podstawowy powinien również mieć swoje testy w _core_module/src/test/java_. – kriegaex

+2

Ewentualnie, jeśli nie chcesz, aby twoje moduły zostały rozpakowane w zacienionym słoiku, możesz użyć [onejar-maven-plugin] (https://code.google.com/archive/p/onejar-maven-plugin/), aby aby utworzyć JAR JAR zagnieżdżonych JARów, tzn. istnieje specjalny moduł ładujący klasy ładujący niezmienione pliki JAR bezpośrednio z pliku JAR. Dostępne również w Maven Central za pośrednictwem [tego widelca] (https://github.com/jolira/onejar-maven-plugin). Jeśli ty (Kallada) chcesz wiedzieć więcej na ten temat i mam szansę, abyś zaakceptował to jako odpowiedź, po prostu powiedz mi, a ja ją przygotuję. Ale Maven Shade również wykona zadanie, ta odpowiedź jest prawidłowa. – kriegaex

+0

Przykro mi, ludzie nie mogli na czas odpowiedzieć na twoje pytania z powodów osobistych. – kallada

4

Konfiguracja acme_module moduł jako tłuszcz - moduł ten powinien produkować wykonywalny tłuszczu słoik ze wszystkimi zależnościami.

Dodaj core_module do acme_module jako zależność.

Przenieś swoje klasy testowe z src/test/java do src/main/java, ponieważ ta klasa powinna być wykonywalna. Jeśli masz testy (np. Junit), pozostaw te klasy w katalogu test, ale część wykonywalna powinna pozostać w main.