2012-01-12 89 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