2

我正在尝试在我的 android 项目中使用 maven 依赖管理。我正在使用以下

我有一个 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

转换为 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 如下所示(repo 托管在服务器上,代码中的链接)

<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 传递) NOTE1:我已经尝试将 maven Central 与我的私有 test-maven-repo 一起添加。

注意 2:当我在带有 gradle 的 Android Studio 中使用 maven repo 时,一切都像黄油一样工作。

问题 :

  • 在 Eclipse 的 android 项目中使用 maven 依赖管理我的设置是否错误?
  • 我在这里做错了什么?
  • 是 Maven 版本/m2e-android 插件/eclipse 版本还是我使用这三个版本的组合来执行依赖管理?
4

0 回答 0