我有一个 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。看截图:
所以我的问题:
- 为什么由 maven 构建时出现运行时异常?
- 为什么 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