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:
test/resources
and test/java
source folders myselfI 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!
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.
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.
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.
The maven targets are located in your project config/ folder.
Check out the Notes section from their Getting Started page here:
Notes:
- 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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With