【问题标题】:Maven: NoClassDefFoundError: android.support.v4.app.FragmentMaven:NoClassDefFoundError:android.support.v4.app.Fragment
【发布时间】:2013-08-23 13:16:26
【问题描述】:

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

但是,当从 maven 构建时出现错误

NoClassDefFoundError: android.support.v4.app.Fragment

只要我使用 android-support 库就会弹出。这是我在我的 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. 为什么 Eclipse 中不显示 android-support lib? (是的,我已经运行了几十次“Maven”->“更新项目...”)。

更新1:关于问题2:删除&lt;scope&gt;provided&lt;/scope&gt;标签(Maven Eclipse Plugin won't add Android support-v4 to build path)。

删除 &lt;scope&gt;provided&lt;/scope&gt; 后,我在由 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

【问题讨论】:

  • 我不明白您是否为支持库提供了范围?因为从 xml 我看不到它,但您对问题 2 的评论提到您拥有它
  • 抱歉不清楚,是的,你是对的。我在我的 Android-app 项目和我的 Android-test 项目中覆盖了上面的 pom.xml
  • 所以你没有问题了,因为提供的支持库的范围是错误的
  • 我还有问题。删除提供的范围使 jar 文件出现在 Eclipse 中的 Maven 依赖项下。但是,当从 Eclipse 启动时,应用程序在运行时找不到支持库。
  • 我不使用 eclipse,但我的同事总是遇到 maven-eclipse 集成的问题。请检查支持库的导出复选框是否在“订购和导出”选项卡上

标签: android maven android-support-library


【解决方案1】:

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

【讨论】:

  • 问题未解决...是的,删除提供的范围确实使依赖项出现在 Eclipse 中。但是,我仍然有未解决的问题 1。从 Maven 构建时,我无法运行该应用程序。删除提供的范围后,我收到一个类似于第一个的新错误(我将更新我的问题)。感谢您迄今为止的帮助。
  • 你还有其他依赖吗?任何使用支持库的库(如 ABS)?
  • 嗨,Eugen,我认为问题现在已经解决了。在我的 android 项目 pom 中,我删除了提供的范围(使范围“编译”)。在我的 android-test 项目中,我保留了提供的范围。我会在确认问题已解决后立即更新我的问题。
  • 我建议创建新问题
猜你喜欢
  • 1970-01-01
  • 2015-05-22
  • 1970-01-01
  • 1970-01-01
  • 2013-06-15
  • 2018-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多