簡體   English   中英

Maven無法識別測試范圍中的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM