Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Maven没有';无法识别测试范围中的apklib依赖项_Android_Unit Testing_Maven_Android Maven Plugin - Fatal编程技术网

Android Maven没有';无法识别测试范围中的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

所以我在一个模块中有一些类,我写这个模块是为了帮助进行Robolectric风格的单元测试,我希望能够在我的其他模块中共享这个模块。这个模块有自己的单元测试,我将它设置为一个apklib。我在用电话。问题似乎是它无法识别测试范围内的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替换的工件),它实际上是一个目录而不是一个文件,因此它不会被安装或部署到本地存储库缓存或远程存储库

因此,当在reactor中,一个附加主工件的插件还没有运行(在您的例子中是
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