2012-01-12 20 views
11

He instalado con éxito & configuré el complemento M2E Maven para Eclipse, junto con Android SDK y ADT.Android Maven Directorio Estructura

Quiero crear proyectos de Android desde el interior Maven, y así me encontré this artículo que da instrucciones sobre cómo instalar el Android-Maven Plugin, y usando un arquetipo de Maven Android preexistente para la inicialización de un proyecto.

Seguí las instrucciones a una "T" y obtuve el proyecto "mavenified" maravillosamente.

El único problema es, que estoy acostumbrado (y realmente como!) La siguiente estructura típica directorio Maven:

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

Sin embargo, no parece que este arquetipo para contener un directorio src/test/*, sólo src/main/* árbol. ¿Cómo obtengo el "subárbol" de prueba en su?

supongo que tengo dos opciones:

  • Buscar un androide-Maven arquetipo diferente que lo contiene; o
  • añadir manualmente el test/resources y test/java fuente mí carpetas

yo no sabría ni por dónde empezar a buscar por la primera opción, y, francamente, estoy asustado probar el segundo! He oído que cambiar la estructura de directorios de un arquetipo puede arruinar realmente la construcción.

¿Qué significaría TAN? ¿Hay algo obvio que me falta aquí? ¡Gracias por adelantado!

+0

Solo una nota. Puede obtener mucha más productividad al escribir un proyecto de biblioteca que se puede construir como un proyecto maven maven simple. Colocando la funcionalidad apropiada en esto significa que puedes construir y probar mucho más rápido. – Steven

Respuesta

8

Mira la sección de notas de su página de introducción here:

Notas:

  1. No ponga pruebas en src/test/java que desea estar a cargo de la Maven Android Enchufar. Si coloca sus pruebas allí, Maven las ejecuta como pruebas JUnit normales en la JVM, con los archivos JAR a los que se puede acceder en classpath, que incluye android.jar. Debido a que android.jar solo contiene métodos vacíos que arrojan excepciones, obtienes excepciones de la forma java.lang.RuntimeException: Stub !. En su lugar, las pruebas deben ir en src/main/java, donde no serán ejecutadas por Maven como pruebas durante la compilación, sino que se incluirán en la apk y se implementarán y ejecutarán en el dispositivo (donde android.jar tiene implementaciones de métodos) en lugar de talones).
  2. Si tiene pruebas de JUnit que no llaman ninguna API de Android (directa o transitoriamente), póngalas en src/test/java para que JUnit las ejecute localmente y más rápidamente que si se ejecuta en el dispositivo.
  3. Asegúrate de que el objetivo de Android Maven esté configurado en jar-no-fork en lugar de test-jar-no-fork. Haga esto incluso para proyectos que solo contienen pruebas.

ACTUALIZACIÓN:
El subárbol "prueba" más adecuado OMI se src/test/java, como se indica en el segundo punto, siempre y cuando las pruebas JUnit es prueba puramente POJO que no lo hace involucrar cualquier llamada API de Android, estarás bien.

Uso src/test/java para todos Robolectric test de junit con prueba instrumentada en un proyecto de prueba de Android por separado, todo administrado por maven, todo funciona bien para mí.

Consulte el proyecto MorseFlash de ejemplo here, que incluye src/test/java como ejemplo.

+0

Muy interesante, gracias yorkw! Pero eso plantea la pregunta: ¿qué se convierte entonces en el subárbol "prueba" adecuado? Me gusta mantener mis clases principales bajo 'src/main/java' y luego replicar el mismo árbol de paquetes exacto debajo de' src/test/java'. Así que la clase 'com.foo.Widget' estaría ubicada en' src/main/java/com/foo' y tendría una prueba unitaria en URI 'src/test/java/com/foo/WidgetTest'. ¿Cómo este paradigma "' src/main/java'-only "ahora acomoda tal estructura? – IAmYourFaja

+0

@AdamTannon, mira mi actualización. – yorkw

Cuestiones relacionadas