[英]Android Maven Plugin apklib Mojo doesn't include compiled R in resulting apklib
[英]Maven doesn't recognize apklib dependencies in test scope
因此,我在為幫助Robolectric樣式單元測試而編寫的模塊中有一些類,並且我希望能夠與其他模塊共享該模塊。 這個模塊有自己的單元測試,我已經將其設置為apklib。 我正在使用maven-android-plugin 。 問題似乎是它無法識別測試范圍內的apklib。 有任何解決方法,還是我錯過了什么?
我注意到的一件事是,如果我運行命令mvn install
,一切都會構建,並且我所有的測試都運行良好,但是如果我執行mvn test
它表示找不到類。
Maven具有“反應堆”的概念,這只是正在建造的項目清單的一個幻想術語。 在Maven構建的開始和結束時,Maven打印出此項目列表(如果定義,則使用/project/name
(XPath),否則使用groupId:artifactId
)。
對於反應堆中的每個項目,Maven都會維護一個已附加工件的列表。 默認情況下,將附加每個模塊的pom.xml
,並且在每個插件運行時,它們可以選擇附加其他工件。 大多數插件不附帶工件,以下是一些插件:
jar:jar
創建一個.jar
並將其附加為主要工件(除非您在配置中指定分類器) war:war
創建一個.war
並將其附加 source:jar
創建源Java代碼的.jar
並將其附加到source
分類器 javadoc:jar
創建JavaDocs的.jar
並將其附加到javadoc
的分類器 android:apklib
創建一個.apklib
工件並將其附加為主要工件 還有一個默認的主工件(這是用jar:jar替換的工件),它實際上是目錄而不是文件,因此不會安裝或部署到本地存儲庫高速緩存或遠程存儲庫。
因此,當在反應堆中,並且尚未連接附加主要工件的插件(在您的情況下為android:apklib
)尚未運行,而另一個插件要求主要工件時,它將獲得目錄${project.build.outputDirectory}
。 如果在附加了主要工件之后,將提供該主要工件。
test
階段發生在package
階段之前,因此將通過目錄而不是.apklib
。
在多模塊項目中,事情變得更加復雜(這是我的長篇介紹會幫助您的地方)
Maven必須構建測試類路徑。 如果依賴項之一在反應堆內,則Maven將使用附加到反應堆的工件。 否則,它將使用本地緩存(如有必要,從遠程存儲庫填充)。
當你跑步
mvn test
在從根開始的一個multimdule項目中,沒有替代默認(基於目錄)的工件,因此模塊內類路徑將到達target / classes目錄(並且我們假設android插件知道如何處理此類測試) ...您發現它沒有)。
當你跑步
mvn package
要么
mvn install
但是,在同一個項目中,因為每個模塊都按順序完成了其生命周期,所以所有從屬模塊都將交換其.apklib
文件作為其附加工件。
這里最可能的問題是您的測試不適用於目錄,需要實際的.apklib
文件。 在這種情況下,您別無選擇,只能將生命周期至少推進到package
階段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.