Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Maven Directory Structure

I have successfully installed & configured the M2E Maven plugin for Eclipse, along with Android SDK and ADT.

I want to create Android Projects from inside Maven, and so I found this article which gives instructions on installing the Android-Maven Plugin, and using a pre-existing Android-Maven archetype for initializing a project.

I followed the instructions to a "T" and got the project "mavenified" beautifully.

The only problem is, I'm used to (and really like!) the following typical Maven directory structure:

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

However, this archetype doesn't seem to contain a src/test/* directory, only a src/main/* tree. How do I get the test "subtree" in their?

I guess I have two options:

  • Find a different Android-Maven archetype that contains it; or
  • Manually add the test/resources and test/java source folders myself

I wouldn't even know where to begin looking for the first option, and, quite frankly, I'm scared to try the second! I've heard that changing an archetype's directory structure can really mess up the build.

What would SO suggest? Is there anything obvious that I'm missing here? Thanks in advance!

like image 259
IAmYourFaja Avatar asked Jan 12 '12 20:01

IAmYourFaja


People also ask

What is the folder structure of Maven?

maven-project/src/main – contains source code and resources that become part of the artifact. maven-project/src/test – holds all the test code and resources. maven-project/src/it – usually reserved for integration tests used by the Maven Failsafe Plugin.

What is Maven target directory?

The target directory is used to house all output of the build. The src directory contains all of the source material for building the project, its site and so on. It contains a subdirectory for each type: main for the main build artifact, test for the unit test code and resources, site and so on.

Does Maven project provide any folder structure?

Maven defines a standard directory structure. The src directory is the root directory of source code and test code. The main directory is the root directory for source code related to the application itself, not test code. The test directory contains the test source code.

Where is Maven target folder?

The maven targets are located in your project config/ folder.


1 Answers

Check out the Notes section from their Getting Started page here:

Notes:

  1. Do not put tests in src/test/java that you want to be run by the Android Maven Plugin. If you put your tests there, Maven runs them as normal JUnit tests in the JVM, with the JAR files that are accessible on the classpath, which includes the android.jar. Because the android.jar only contains empty methods that throw exceptions, you get exceptions of the form java.lang.RuntimeException: Stub!. Instead, the tests need to go in src/main/java, where they will not be run by Maven as tests during compilation, but will be included in the apk and deployed and run on the device (where the android.jar has method implementations instead of stubs).
  2. If you have JUnit tests that don't call any Android APIs (directly or transitively), put them in src/test/java so JUnit runs them locally and more quickly than if run on the device.
  3. Make sure the Android Maven goal is set to jar-no-fork instead of test-jar-no-fork. Do this even for projects that only contain tests.

UPDATE:
The most suitable "test" subtree IMO is src/test/java, as stated in the second point, as long as you JUnit tests are purely POJO test which doesn't involve any Android API call, you will be fine.

I use src/test/java for all Robolectric junit test with instrumented test in separate Android test project, all managed by maven, everything works fine for me.

Checkout the Sample MorseFlash project here, which include src/test/java as a example.

like image 99
yorkw Avatar answered Oct 03 '22 18:10

yorkw