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/javasource 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!
One Solution collect form web for “Android Maven Directory Structure”
Check out the Notes section from their Getting Started page here:
- 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).
- 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.
- 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.
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.