2

我有一个 Android 项目,我可以直接在 Eclipse 中构建和运行它而不会出现问题。

但是,当从 Maven 构建时,错误

NoClassDefFoundError: android.support.v4.app.Fragment

只要我使用 android-support lib 就会弹出。我在我的pom中有这个:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.google.android</groupId>
            <artifactId>support-v4</artifactId>
            <version>r7</version>
        </dependency>
        <dependency>
            <groupId>com.google.android</groupId>
            <artifactId>android</artifactId>
            <version>4.1.1.4</version>
        </dependency>
        <dependency>
            <groupId>com.google.android</groupId>
            <artifactId>android-test</artifactId>
            <version>4.1.1.4</version>
        </dependency>
    </dependencies>
</dependencyManagement>

并且软件包都已正确下载,并且可以毫无问题地构建应用程序。

正如我在上面所写的,该应用程序在由 Eclipse 构建时运行。让我想知道的一件事是,android-support 库没有出现在 Maven 依赖项下。因此,我将其添加为外部 Jar。看截图:

在此处输入图像描述

所以我的问题:

  1. 为什么由 maven 构建时出现运行时异常?
  2. 为什么 android-support lib 不出现在 Eclipse 中?(是的,我已经运行了数十次“Maven”->“更新项目...”)。

更新 1:关于问题 2:删除<scope>provided</scope>标签(Maven Eclipse 插件不会将 Android support-v4 添加到构建路径)。

删除后<scope>provided</scope>,由 maven 构建时出现此运行时错误(MyFragmentAdapter extends FragmentPagerAdapter)

08-26 10:42:56.054: W/dalvikvm(8132): Class resolved by unexpected DEX: Lcom/firm/myapp/adapter/MyFragmentAdapter;(0x41ce03a8):0x5a55c000 ref [Landroid/support/v4/app/FragmentPagerAdapter;] Landroid/support/v4/app/FragmentPagerAdapter;(0x41ce03a8):0x5a4e3000
08-26 10:42:56.054: W/dalvikvm(8132): (Lcom/firm/myapp/adapter/MyFragmentAdapter; had used a different Landroid/support/v4/app/FragmentPagerAdapter; during pre-verification)
08-26 10:42:56.054: W/dalvikvm(8132): Unable to resolve superclass of Lcom/firm/myapp/adapter/MyFragmentAdapter; (119)
08-26 10:42:56.054: W/dalvikvm(8132): Link of class 'Lcom/firm/myapp/adapter/MyFragmentAdapter;' failed
08-26 10:42:56.064: W/ClassPathPackageInfoSource(8132): Cannot load class. Make sure it is in your apk. Class name: 'com.firm.myapp.adapter.MyFragmentAdapter'. Message: com.firm.myapp.adapter.MyFragmentAdapter
08-26 10:42:56.064: W/ClassPathPackageInfoSource(8132): java.lang.ClassNotFoundException: com.firm.myapp.adapter.MyFragmentAdapter
4

1 回答 1

0

正如我们快速讨论的那样 - 支持库的“提供”范围是错误的,并使其在编译时解决了 maven 问题。

于 2013-08-26T08:40:37.900 回答