4

アーティファクトがMavenを介して管理されるAndroidライブラリ(SiriRestClient)を開発しており、開発にEclipseを使用しています。プロジェクトにアセットがなく、Javaクラスのみがあり、Eclipse / Maven / ADTでアーティファクトをapklibsとしてパッケージ化する際に問題があるため、アーティファクトをJARファイルとしてパッケージ化しています。

また、SiriRestClientライブラリに依存するAndroidユーザーインターフェイスアプリケーション(SiriRestClientUI )も開発しています。Mavenを介してSiriRestClientライブラリへの依存関係を管理しています。

Eclipseでは、プロジェクトのビルドとデプロイの両方が独立して正常に行われます。

問題:

Mavenを介してSiriRestClientライブラリへのSiriRestClientUI依存関係の管理を開始したので、ライブラリプロジェクトとSiriRestClientUIをEclipseで同時に開いているとNoClassDefFoundError、SiriRestClientUIアプリをデバイスにデプロイしようとするとが発生します。

例えば:

11-01 16:11:52.288: E/AndroidRuntime(9409): java.lang.NoClassDefFoundError: edu.usf.cutr.siri.android.client.config.SiriJacksonConfig
11-01 16:11:52.288: E/AndroidRuntime(9409):     at edu.usf.cutr.siri.android.ui.MainActivity.onCreate(MainActivity.java:100)
11-01 16:11:52.288: E/AndroidRuntime(9409):     at android.app.Activity.performCreate(Activity.java:4470)
11-01 16:11:52.288: E/AndroidRuntime(9409):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1053)
11-01 16:11:52.288: E/AndroidRuntime(9409):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1934)
11-01 16:11:52.288: E/AndroidRuntime(9409):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995)
11-01 16:11:52.288: E/AndroidRuntime(9409):     at android.app.ActivityThread.access$600(ActivityThread.java:128)
11-01 16:11:52.288: E/AndroidRuntime(9409):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1161)
11-01 16:11:52.288: E/AndroidRuntime(9409):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-01 16:11:52.288: E/AndroidRuntime(9409):     at android.os.Looper.loop(Looper.java:137)
11-01 16:11:52.288: E/AndroidRuntime(9409):     at android.app.ActivityThread.main(ActivityThread.java:4514)
11-01 16:11:52.288: E/AndroidRuntime(9409):     at java.lang.reflect.Method.invokeNative(Native Method)
11-01 16:11:52.288: E/AndroidRuntime(9409):     at java.lang.reflect.Method.invoke(Method.java:511)
11-01 16:11:52.288: E/AndroidRuntime(9409):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
11-01 16:11:52.288: E/AndroidRuntime(9409):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
11-01 16:11:52.288: E/AndroidRuntime(9409):     at dalvik.system.NativeStart.main(Native Method)`

これは、ライブラリとアプリの同時開発プロセスにおける大きな問題です。私が見つけた唯一の回避策は、ライブラリコードを編集し、ライブラリプロジェクトをビルドし、ライブラリプロジェクトを閉じてから、SiriRestClientUIアプリを実行することです。

この問題は、ライブラリプロジェクトが開いているときにEclipse/MavenがMavenの依存関係をどのように処理しているかに起因すると思います。

これは、ライブラリプロジェクト(その上のSiriRestClient)が閉じているときのSiriRestClientUIプロジェクトを示すEclipseのスクリーンショットです。

ここに画像の説明を入力してください

sirirestclient-1.0.0-SNAPSHOT.jar「MavenDepedencies」の下にあるファイルは、私のローカルMavenリポジトリから取得されています。これは私が欲しいものです。この構成では、すべてが正常に機能します。

ただし、SiriRestClientライブラリプロジェクトを開くと、「Maven Depedencies」エントリが変更され、JARファイルが消え、代わりにプロジェクトのフォルダが表示されます。

ここに画像の説明を入力してください

両方のプロジェクトが開いているときにSiriRestClientUIを起動しようとすると、が表示されますNoClassDefFoundError。したがって、Eclipseがプロジェクトビルドをリダイレクトしており、ライブラリクラスが含まれていないようです。

質問:

Mavenの依存関係をローカルプロジェクトに切り替えるのではなく、ローカルのMavenリポジトリ内のJARファイルに常に依存するようにEclipse / Mavenを構成するにはどうすればよいですか?

NoClassDefFoundErrorまたは、この構成でを取り除く別の方法はありますか?

ライブラリプロジェクトのpom.xmlファイルはここにあります。

SiriRestClientUIアプリプロジェクトのpom.xmlファイルはこちらです。

4

2 に答える 2

5

これを試してください:プロジェクトを右クリック->プロパティ->Maven->チェックを外しResolve dependencies from Workspace projectsます。

于 2012-11-01T21:43:35.337 に答える
0

あなたは確かに2つのことをする必要があります、最初に:アンドロイドpeojectは依存しているノードapklibを持っているべきです、このように、パッケージングノードを忘れないでください

<modelVersion>4.0.0</modelVersion>
<groupId>cn.company.common</groupId>
<artifactId>util</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>apklib</packaging>
<name>util</name>

2番目:Androidプロジェクトの依存関係ノードはこのようにする必要があり、タイプノードを忘れないでください。追加することを忘れないでください

<dependency>
<groupId>cn.company.common</groupId>
<artifactId>util</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>apklib</type>
</dependency>
于 2014-09-19T07:43:27.610 に答える