Структура каталога Android Maven

Я успешно установил и настроил плагин M2E Maven для Eclipse, а также Android SDK и ADT.

Я хочу создать проекты Android изнутри Maven, и поэтому нашел эту статью, в которой приводятся инструкции по установке плагина Android-Maven и использование уже существующего Архетип Android-Maven для инициализации проекта.

Я следил за инструкциями на "Т" и прекрасно реализовал проект "mavenified".

Единственная проблема: я привык к (и действительно нравится!) следующую типичную структуру каталогов Maven:

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

Однако этот архетип не содержит каталог src/test/*, а только дерево src/main/*. Как получить тестовое "поддерево" в своем?

У меня есть два варианта:

  • Найдите другой архетип Android-Maven, который содержит его; или
  • Вручную добавьте исходные папки test/resources и test/java

Я даже не знаю, с чего начать искать первый вариант, и, честно говоря, я боюсь попробовать второе! Я слышал, что изменение структуры каталога архетипа может действительно испортить сборку.

Что предложит SO? Есть ли что-то очевидное, что я здесь отсутствует? Спасибо заранее!

Ответ 1

Откроем раздел "Примечания" на странице "Начало работы" здесь:

Примечания:

  • Не ставьте тесты в src/test/java, которые вы хотите запустить под Android Maven Plugin. Если вы разместите свои тесты там, Maven запускает их как обычные тесты JUnit в JVM, а файлы JAR доступны в пути к классам, который включает android.jar. Поскольку android.jar содержит только пустые методы, которые генерируют исключения, вы получаете исключения из формы java.lang.RuntimeException: Stub!. Вместо этого тесты должны проходить в src/main/java, где они не будут запускаться Maven в качестве тестов во время компиляции, но будут включены в apk и развернуты и запущены на устройстве (где у android.jar есть реализации методов вместо окурков).
  • Если у вас есть тесты JUnit, которые не вызывают никаких API Android (прямо или транзитивно), поместите их в src/test/java, поэтому JUnit запускает их локально и быстрее, чем при запуске на устройстве.
  • Убедитесь, что цель Android Maven установлена ​​на jar-no-fork вместо test-jar-no-fork. Сделайте это даже для проектов, содержащих только тесты.

UPDATE:
Наиболее подходящим подпрограммой "test" IMO является src/test/java, как указано во втором пункте, если вы тестируете JUnit, это просто POJO-тест, который не связан с вызовом Android API, все будет в порядке.

Я использую src/test/java для всех Robolectric junit test с инструментальным тестом в отдельном тестовом проекте Android, все из которого управляются maven, все работает отлично для меня.

Ознакомьтесь с проектом Sample MorseFlash здесь, который включает пример src/test/java.