2012-01-12 17 views
11

Mam pomyślnie zainstalowany & skonfigurowany plugin M2E Maven dla Eclipse, wraz z Android SDK i ADT.Struktura katalogu Android Maven

Chcę tworzyć projekty Android z wewnątrz Maven, a więc znalazłem this artykuł, który daje instrukcje dotyczące instalacji Android Maven Plugin, a przy użyciu wstępnie istniejącej Android-Maven archetyp dla inicjowania projektu.

Postępowałem zgodnie z instrukcjami do "T" i pięknie wspominałem o projekcie "mavenified".

Jedynym problemem jest to, jestem przyzwyczajony do (i naprawdę podoba!) Następujące typowe Maven strukturę katalogów:

src/ 
    main/ 
     resources/ 
     java/ 
    test/ 
     resources/ 
     java/ 

to jednak archetyp nie wydaje się zawierać katalog src/test/*, tylko src/main/* drzewo. Jak uzyskać test "poddrzewo" w ich?

Chyba mam dwie opcje:

  • znaleźć inny Android-Maven archetyp, który zawiera je; lub
  • ręcznie dodać test/resources i test/java źródło foldery sobie

Ja nawet nie wiem od czego zacząć patrząc na pierwszej opcji, i, szczerze mówiąc, jestem przestraszony spróbować drugi! Słyszałem, że zmiana struktury katalogów archetypu może naprawdę zepsuć kompilację.

Co by sugerowało SO? Czy jest coś oczywistego, czego tu brakuje? Z góry dziękuję!

+0

Tylko notatkę. Możesz zyskać o wiele większą produktywność, pisząc projekt biblioteki, który może być zbudowany jako projekt java maven. Umieszczenie odpowiedniej funkcjonalności w ten sposób oznacza, że ​​możesz budować i testować o wiele szybciej. – Steven

Odpowiedz

8

Zapoznaj się z sekcji Notatki z ich Getting Started stronie here:

Uwagi:

  1. Nie kładź testów w src/test/java, które mają być prowadzone przez Android Maven Podłącz. Jeśli umieścisz tam swoje testy, Maven uruchamia je jako normalne testy JUnit w JVM, z plikami JAR dostępnymi w ścieżce klas, która zawiera plik android.jar. Ponieważ plik android.jar zawiera tylko puste metody, które powodują wyjątki, pojawiają się wyjątki w postaci java.lang.RuntimeException: Stub !. Zamiast tego testy muszą przejść w src/main/java, gdzie nie będą one uruchamiane przez Mavena jako testy podczas kompilacji, ale będą zawarte w apk i wdrożone i uruchomione na urządzeniu (gdzie android.jar ma implementacje metod zamiast stubów).
  2. Jeśli masz testy JUnit, które nie wywołują żadnych interfejsów API systemu Android (bezpośrednio lub przechodnie), umieść je w src/test/java, aby JUnit uruchamiał je lokalnie i szybciej niż w przypadku uruchamiania urządzenia.
  3. Upewnij się, że celem Android Maven jest jar-no-fork zamiast test-jar-no-fork. Zrób to nawet w przypadku projektów, które zawierają tylko testy.

UPDATE:
Najodpowiedniejszym "test" poddrzewo IMO jest src/test/java, jak stwierdzono w drugim punkcie, dopóki testy JUnit są czysto POJO test, który nie dotyczyć dowolnego wywołania interfejsu API systemu Android, wszystko będzie w porządku.

Używam src/test/java dla wszystkich testów Robolectric z testem instrumentalnym w osobnym projekcie testowym Android, wszystko zarządzane przez maven, wszystko działa dobrze dla mnie.

Zamówienie przykładowego projektu MorseFlash here, który zawiera przykład src/test/java.

+0

Bardzo interesujące - dziękuję yorkw! Ale to nasuwa pytanie, co następnie staje się odpowiednim podtekstem "testowym"? Lubię utrzymywać moje główne klasy w katalogu 'src/main/java', a następnie replikować dokładnie to samo drzewo pakietów pod' src/test/java'. Tak więc klasa 'com.foo.Widget' będzie zlokalizowana w' src/main/java/com/foo' i będzie miała test jednostkowy na URI 'src/test/java/com/foo/WidgetTest'. W jaki sposób ten "paradygmat" src/main/java "jest w stanie pomieścić taką strukturę? – IAmYourFaja

+0

@AdamTannon, zobacz moją aktualizację. – yorkw

Powiązane problemy