Android Maven没有';无法识别测试范围中的apklib依赖项
所以我在一个模块中有一些类,我写这个模块是为了帮助进行Robolectric风格的单元测试,我希望能够在我的其他模块中共享这个模块。这个模块有自己的单元测试,我将它设置为一个apklib。我在用电话。问题似乎是它无法识别测试范围内的APKLIB。有什么解决办法吗,或者我遗漏了什么Android Maven没有';无法识别测试范围中的apklib依赖项,android,unit-testing,maven,android-maven-plugin,Android,Unit Testing,Maven,Android Maven Plugin,所以我在一个模块中有一些类,我写这个模块是为了帮助进行Robolectric风格的单元测试,我希望能够在我的其他模块中共享这个模块。这个模块有自己的单元测试,我将它设置为一个apklib。我在用电话。问题似乎是它无法识别测试范围内的APKLIB。有什么解决办法吗,或者我遗漏了什么 我注意到的一件事是,如果我运行命令mvn install,所有的构建和测试都可以正常运行,但是如果我运行mvn test,它会说它找不到类。Maven有“反应器”的概念,这只是正在构建的项目列表的一个花哨的术语。在Ma
我注意到的一件事是,如果我运行命令
mvn install
,所有的构建和测试都可以正常运行,但是如果我运行mvn test
,它会说它找不到类。Maven有“反应器”的概念,这只是正在构建的项目列表的一个花哨的术语。在Maven构建的开始和结束时,Maven打印出这个项目列表(如果定义了,则使用/project/name
(XPath),否则使用groupId:artifactId
)
对于反应堆中的每个项目,Maven维护一个已附加工件的列表。默认情况下,将附加每个模块的pom.xml
,并且在每个插件运行时,它们可以选择附加其他工件。大多数插件不附加工件,以下是一些插件:
创建一个jar:jar
并将其作为主要工件附加(除非在配置中指定分类器).jar
创建一个war:war
并附加它.war
创建源Java代码的source:jar
,并使用.jar
source
创建JavaDocs的javadoc:jar
,并使用.jar
javadoc
创建一个android:apklib
工件并.apklib
android:apklib
),而另一个插件请求主工件时,它将得到目录${project.build.outputDirectory}
。如果在附加主工件之后,则将提供该主工件
测试
阶段发生在包
阶段之前,因此将通过目录而不是.apklib
在一个多模块的项目中,事情变得更加复杂(这就是我的长篇介绍应该能帮助你的地方)
Maven必须构建测试类路径。如果其中一个依赖项在reactor中,Maven将使用附加到reactor的工件。否则它将使用本地缓存(必要时从远程存储库填充)
当你跑的时候
mvn test
mvn package
在根目录下的multimdule项目中,没有默认(基于目录的)工件的替代品,因此模块内的类路径将指向目标/类目录(我们假设android插件知道如何处理此类测试……您发现它不知道)
当你跑的时候
mvn test
mvn package
或
然而,在同一个项目中,由于每个模块都按顺序完成其生命周期,因此所有依赖模块都将在其.apklib
文件中作为其附加工件进行交换
这里最可能的问题是,您的测试无法使用目录,需要实际的
.apklib
文件。在这种情况下,您别无选择,只能将生命周期至少推进到包阶段。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替换的工件),它实际上是一个目录而不是一个文件,因此它不会被安装或部署到本地存储库缓存或远程存储库
因此,当在reactor中,一个附加主工件的插件还没有运行(在您的例子中是android:apklib
),而另一个插件请求主工件时,它将得到目录${project.build.outputDirectory}
。如果在附加主工件之后,则将提供该主工件
测试
阶段发生在包
阶段之前,因此将通过目录而不是.apklib
在一个多模块的项目中,事情变得更加复杂(这就是我的长篇介绍应该能帮助你的地方)
Maven必须构建测试类路径。如果其中一个依赖项在reactor中,Maven将使用附加到reactor的工件。否则,它将使用本地缓存(populati