我正在尝试准备使用selendroid-standalone来处理与手机的连接的测试用例。该项目使用Maven并包含几个子模块,因此我在top pom.xml中添加了这种依赖关系:
<dependency> <groupId>io.selendroid</groupId> <artifactId>selendroid-standalone</artifactId> <scope>compile</scope> <type>jar</type> <version>0.5.1</version> </dependency>
之后,当我尝试编译它时,我得到了这样的错误:
Error adding archived file-set. PlexusIoResourceCollection not found for: d:\XXX\selendroid-server-0.5.1.apk: No such archiver: 'apk'.
我试图将依赖关系移至子模块,但随后在使用SelendroidConfiguraion
或包中其他类的行上出现NoClassDefFoundError。
编辑:
添加任何其他依赖项都不会导致NoClassDefFoundError。
最佳答案
您需要指定自己的程序集,以阻止Maven尝试解压缩然后重新打包apk文件的内容。网上有很多相关的教程(通常用于swfs或zip),但是我只是通过指定以下内容来做到这一点:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<id>jar-with-dependencies</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>/</outputDirectory>
<useProjectArtifact>true</useProjectArtifact>
<unpack>true</unpack>
<scope>runtime</scope>
<excludes>
<exclude>*:apk:*</exclude>
</excludes>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<directory>${project.build.outputDirectory}</directory>
<outputDirectory>.</outputDirectory>
</fileSet>
</fileSets>
</assembly>
将其保存在自己的XML文件中,然后将POM指向此文件而不是默认的程序集描述符:
<!-- disabled predefined assembly
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
-->
<descriptors>
<descriptor>src/main/assembly/assembly-descriptor.xml</descriptor>
</descriptors>