Android プロジェクトで Maven 依存関係管理を使用しようとしています。私は以下を使用しています
- ADTとM2Eclipseを使用したEclipse Mars
- m2e-androidプラグイン 1.6
- Maven 2.2.1
- Mac OS X 10.10.4
私はclasses.jarパッケージを持っています。これを使用してmavenアーティファクトに変換します
mvn clean org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -DgroupId=com.example.test -DartifactId=test -Dversion=1.0 -DpomFile=pom.xml -Dpackaging=jar -Dfile=classes.jar -DlocalRepositoryPath=test-maven-repo/releases/jar -DgeneratePom=true -DcreateChecksum=true
上記のコマンドが参照する付属の pom.xml は次のようになります
<?xml version="1.0" encoding="UTF-8" ?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example.test</groupId>
<artifactId>test</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.squareup.okhttp</groupId>
<artifactId>okhttp</artifactId>
<version>2.4.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.android.support</groupId>
<artifactId>appcompat-v7</artifactId>
<version>22.2.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
アーティファクトをプライベート ローカル Maven リポジトリ (システムではtest-maven-repoという名前) にデプロイしたら、新しい Android プロジェクトを作成し (この時点で Android デバイスで実行されていることをテストします)、maven に変換します。
を使用してPOMファイルを作成します
これは物事がうまくいかないところです
問題 1 Convert to Maven Project を クリックすると、ビルド システムが起動し、コンソールでこれに気づきます
R.Java was modified!
R.Java was modified!
アプリを実行しようとすると、logcat に以下のスタック トレースが表示されます
07-08 10:58:12.998: E/AndroidRuntime(31032): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.test_app_1/com.example.test_app_1.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.example.test_app_1.MainActivity" on path: DexPathList[[zip file "/data/app/com.example.test_app_1-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
07-08 10:58:12.998: E/AndroidRuntime(31032): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2267)
07-08 10:58:12.998: E/AndroidRuntime(31032): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2418)
07-08 10:58:12.998: E/AndroidRuntime(31032): at android.app.ActivityThread.access$900(ActivityThread.java:154)
07-08 10:58:12.998: E/AndroidRuntime(31032): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
07-08 10:58:12.998: E/AndroidRuntime(31032): at android.os.Handler.dispatchMessage(Handler.java:102)
07-08 10:58:12.998: E/AndroidRuntime(31032): at android.os.Looper.loop(Looper.java:135)
07-08 10:58:12.998: E/AndroidRuntime(31032): at android.app.ActivityThread.main(ActivityThread.java:5289)
07-08 10:58:12.998: E/AndroidRuntime(31032): at java.lang.reflect.Method.invoke(Native Method)
07-08 10:58:12.998: E/AndroidRuntime(31032): at java.lang.reflect.Method.invoke(Method.java:372)
07-08 10:58:12.998: E/AndroidRuntime(31032): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
07-08 10:58:12.998: E/AndroidRuntime(31032): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
07-08 10:58:12.998: E/AndroidRuntime(31032): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.test_app_1.MainActivity" on path: DexPathList[[zip file "/data/app/com.example.test_app_1-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
07-08 10:58:12.998: E/AndroidRuntime(31032): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
07-08 10:58:12.998: E/AndroidRuntime(31032): at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
07-08 10:58:12.998: E/AndroidRuntime(31032): at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
07-08 10:58:12.998: E/AndroidRuntime(31032): at android.app.Instrumentation.newActivity(Instrumentation.java:1066)
07-08 10:58:12.998: E/AndroidRuntime(31032): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2257)
07-08 10:58:12.998: E/AndroidRuntime(31032): ... 10 more
07-08 10:58:12.998: E/AndroidRuntime(31032): Suppressed: java.lang.ClassNotFoundException: com.example.test_app_1.MainActivity
07-08 10:58:12.998: E/AndroidRuntime(31032): at java.lang.Class.classForName(Native Method)
07-08 10:58:12.998: E/AndroidRuntime(31032): at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
07-08 10:58:12.998: E/AndroidRuntime(31032): at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
07-08 10:58:12.998: E/AndroidRuntime(31032): at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
07-08 10:58:12.998: E/AndroidRuntime(31032): ... 13 more
07-08 10:58:12.998: E/AndroidRuntime(31032): Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
注:Eclipse Lunaで動作するようにテストしましたが、android-m2eプラグインv1.6に更新した後、問題1が再発しました。
問題 2 Eclipse Luna と android-m2e プラグイン v1.5 を使用すると、Android デバイスでコンパイルして実行するように、プロジェクトが機能しました。しかし、今回は参照する Maven アーティファクトのみが依存関係としてダウンロードされます。アーティファクトが依存する推移的な依存関係 (独自の pom.xml ファイルでも参照される) は、テスト リポジトリから単独でダウンロードされません。
私のプロジェクトのpom.xmlは以下のようになります(レポがサーバーでホストされている場合、コード内のリンク)
<dependencies>
<dependency>
<groupId>com.example.test</groupId>
<artifactId>test</artifactId>
<version>1.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>company</id>
<name>test-company-repo</name>
<url>http://git.company.com/user/test-maven-repo/raw/master/releases/jar/</url>
</repository>
</repositories>
私は私のmaven依存関係セクションの下でtest.jarを取得しています。私のtest.jarが依存するOkHttp.jarまたはokio.jarはありません(これはmaven centralから推移的にプルされているはずです) 注1:私はプライベートtest-maven-repoとともにmaven centralを追加しようとしました。
注2:Android Studioでmaven repoをgradleで使用すると、すべてがバターのように機能します。
質問:
- Eclipse の Android プロジェクトで Maven 依存関係管理を使用するためのセットアップが間違っていますか?
- ここで何が間違っていますか?
- Maven バージョン/m2e-android プラグイン/Eclipse バージョンですか、それとも基本的に依存関係管理の実行で何かを行うために使用するこれら 3 つの組み合わせですか?