2

問題なくEclipseで直接ビルドして実行できるAndroidプロジェクトがあります。

ただし、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でビルドすると実行されます。私が不思議に思ったことの 1 つは、android-support ライブラリが Maven Dependencies の下に表示されないことです。したがって、外部Jarとして追加しました。スクリーンショットを参照してください:

ここに画像の説明を入力

だから私の質問:

  1. Mavenでビルドしたときに実行時例外が発生するのはなぜですか?
  2. Android サポート ライブラリが Eclipse に表示されないのはなぜですか? (そして、はい、「Maven」->「プロジェクトの更新...」を何十回も実行しました)。

更新 1 : 質問 2 について:<scope>provided</scope>タグを削除します ( Maven Eclipse プラグインはビルド パスに Android support-v4 を追加しません)。

削除した後<scope>provided</scope>、Maven でビルドするとこのランタイム エラーが発生します (MyFragmentAdapter は 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 に答える