2012-01-12 92 views
11

我已成功安装&配置了用于Eclipse的M2E Maven插件以及Android SDK和ADT。Android Maven目录结构

我想从创建的Android项目内 Maven的,所以我发现this物品,其对安装在Android的Maven插件,并使用预先存在的Android的Maven原型用于初始化一个项目的说明。

我按照“T”的指示,精美地获得了“mavenified”项目。

唯一的问题是,我已经习惯了(而且真的很喜欢!)以下典型的Maven目录结构:

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

然而,这个原型似乎并没有包含src/test/*目录,只有一个src/main/*树。 我如何在他们的测试“子树”?

我想我有两个选择:

  • 查找包含一个不同的Android的Maven原型;或
  • 手动添加test/resourcestest/java源文件夹自己

我甚至不知道从哪里开始寻找第一个选项,并坦率地说,我吓得尝试第二!我听说改变一个原型的目录结构可能真的搞乱了构建。

会有什么建议?有什么显而易见的,我在这里失踪?提前致谢!

+0

只是一个说明。您可以通过编写一个可以构建为普通Maven Java项目的库项目来获得更高的生产力。这意味着您可以更快地构建和测试。 – Steven 2012-01-12 23:00:25

回答

8

退房从入门页here注释部分:

注:

  1. 不要把的src/test/java下要被Android Maven的运行试验插入。如果您将测试放在那里,Maven将它们作为JVM中正常的JUnit测试运行,并且可以在类路径中访问JAR文件,其中包括android.jar。由于android.jar只包含抛出异常的空方法,因此会得到java.lang.RuntimeException异常:Stub !.相反,测试需要在src/main/java中进行,在这些测试中,Maven不会在编译期间作为测试运行,但会包含在apk中并在设备上部署和运行(其中android.jar具有方法实现而不是存根)。
  2. 如果您有不调用任何Android API(直接或传递)的JUnit测试,请将它们放在src/test/java中,以便JUnit在本地运行它们,并且比在设备上运行时更快。
  3. 确保Android Maven目标设置为jar-no-fork而不是test-jar-no-fork。即使是只包含测试的项目也要这样做。

UPDATE:
最合适的“测试”子树IMO为src /测试/ java中,如在第二点说,只要你JUnit测试纯粹是POJO测试其并不涉及到任何Android API调用,你会没事的。

我使用src/test/java所有Robolectric junit测试在单独的Android测试项目中进行测试,所有测试项目均由maven管理,一切正常。

结帐样品MorseFlash项目here,包括SRC /测试/ Java作为一个例子。

+0

非常有趣 - 谢谢约克!但是这引出了一个问题,那么什么变成了适合的“测试”子树呢?我喜欢将我的主类放在'src/main/java'下,然后在'src/test/java'下复制同样精确的包树。所以'com.foo.Widget'类将位于'src/main/java/com/foo',并且会在URI'src/test/java/com/foo/WidgetTest'处进行单元测试。这个“src/main/java'-only”范例现在如何适应这样的结构? – IAmYourFaja 2012-01-12 21:42:27

+0

@AdamTannon,看我的更新。 – yorkw 2012-01-12 22:05:29