曾使用过不同的Landroid / support / v4 / app / FragmentActivity;在预验证期间:Android + Fragments + JUnit + Maven

时间:2012-12-25 00:28:23

标签: android eclipse maven junit android-support-library

我在Eclipse下使用Maven构建了两个Android项目。一个是项目本身,另一个是测试项目。

当我以Android JUnit Test运行项目时,它会抛出错误:

java.lang.RuntimeException: Exception during suite construction
Caused by: java.lang.reflect.InvocationTargetException
Caused by: java.lang.NoClassDefFoundError: com.some.TestClass

查看Logcat我发现此错误的根本原因是:

Lcom.some.TestClass; had used a different Landroid/support/v4/app/FragmentActivity; during pre-verification

在网上挖掘我发现similar issue解决方法是从测试项目中删除重复的android-support-v4.jar。但这并不适用于Maven的项目,因为依赖性继承。

我发现让它运行的唯一方法是在启动之前我必须手动从测试项目的构建路径中删除Maven Dependencies库,并向目标Android项目显式添加Project Reference。 / p>

¿有没有人知道如果没有这个 hack 就可以让它工作?

以下是我项目的pom.xml

中的相关片段
<groupId>com.some</groupId>
<artifactId>project</artifactId>
<packaging>apk</packaging>
...
<dependencies>
    ...
    <dependency>
        <groupId>com.google.android</groupId>
        <artifactId>support-v4</artifactId>
    </dependency>
    ...
</dependencies>

测试项目pom.xml

<groupId>com.some</groupId>
<artifactId>project-test</artifactId>
<packaging>apk</packaging>
...
<dependencies>
    ...
    <dependency>
        <groupId>com.some</groupId>
        <artifactId>project</artifactId>
        <packaging>apk</packaging>
    </dependency>

    <dependency>
        <groupId>com.some</groupId>
        <artifactId>project</artifactId>
        <packaging>jar</packaging>
    </dependency>
    ...
</dependencies>

1 个答案:

答案 0 :(得分:0)

最近解决了什么似乎是同样的问题。这不是android-support-library特有的。请检查this answer