Luk*_*uge 11 android exception maven
Stackoverflow上出现了几次这个错误,我将在这个问题中引用其他问题.
我的项目是使用Android Maven插件的Android应用程序,包括库,但也包括一些本地库,因为它们不是通过maven提供的.我的IDE是Eclipse.我主要使用本教程来配置它.我对maven很新.
简而言之,我无法在手机上启动应用程序.启动它时,我会看到上面写的有关Activity的调用错误,这是我的启动Activity调用的SubscriptionView.整个错误跟踪如下:
07-17 15:47:42.170: E/AndroidRuntime(20071): FATAL EXCEPTION: main
07-17 15:47:42.170: E/AndroidRuntime(20071): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.dynamixsspbridge/com.example.dynamixsspbridge.SubscriptionView}: java.lang.ClassNotFoundException: com.example.dynamixsspbridge.SubscriptionView
07-17 15:47:42.170: E/AndroidRuntime(20071): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2034)
07-17 15:47:42.170: E/AndroidRuntime(20071): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
07-17 15:47:42.170: E/AndroidRuntime(20071): at android.app.ActivityThread.access$700(ActivityThread.java:140)
07-17 15:47:42.170: E/AndroidRuntime(20071): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
07-17 15:47:42.170: E/AndroidRuntime(20071): at android.os.Handler.dispatchMessage(Handler.java:99)
07-17 15:47:42.170: E/AndroidRuntime(20071): at android.os.Looper.loop(Looper.java:137)
07-17 15:47:42.170: E/AndroidRuntime(20071): at android.app.ActivityThread.main(ActivityThread.java:4921)
07-17 15:47:42.170: E/AndroidRuntime(20071): at java.lang.reflect.Method.invokeNative(Native Method)
07-17 15:47:42.170: E/AndroidRuntime(20071): at java.lang.reflect.Method.invoke(Method.java:511)
07-17 15:47:42.170: E/AndroidRuntime(20071): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
07-17 15:47:42.170: E/AndroidRuntime(20071): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
07-17 15:47:42.170: E/AndroidRuntime(20071): at dalvik.system.NativeStart.main(Native Method)
07-17 15:47:42.170: E/AndroidRuntime(20071): Caused by: java.lang.ClassNotFoundException: com.example.dynamixsspbridge.SubscriptionView
07-17 15:47:42.170: E/AndroidRuntime(20071): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
07-17 15:47:42.170: E/AndroidRuntime(20071): at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
07-17 15:47:42.170: E/AndroidRuntime(20071): at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
07-17 15:47:42.170: E/AndroidRuntime(20071): at android.app.Instrumentation.newActivity(Instrumentation.java:1068)
07-17 15:47:42.170: E/AndroidRuntime(20071): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2025)
07-17 15:47:42.170: E/AndroidRuntime(20071): ... 11 more
Run Code Online (Sandbox Code Playgroud)
现在,有多种解决方案可供建议:
lib但是libs.我已经为我的本地图书馆这样做了.maven图书馆的所有图书馆都住在Maven所有的地方.可能我可以拿走所有这些罐子并将它们从maven repo中放入libs......然后停止使用maven.虽然这可行,但它几乎不提供解决方案.bin和gen文件夹尝试过它.其他想法没有成功:
Java版本:关于我认为可能对我使用Java 1.5负责的事情.但是,虽然建议使用1.6,但1.5应该有效.切换到1.6也不会改变任何东西.
通过Maven包含的库不会导出/ dexed:我看到的另一个问题是Maven Dependnecies不会在文件夹中显示为dexed Libraries bin/dexedLibs.虽然我相信这将成为一个问题,但后来我已经从项目中删除了所有使用这些库的类,但错误仍然存在.
问题显然与使用Maven有关.如果我创建一个新项目,一切正常,直到我将项目转换为maven项目并通过它添加库pom.xml,即使我没有使用任何库的类.
编辑进一步调查:通过创建另一个新项目,发现在第一个"正确的时钟 - > configure->转换为maven",即使在我更改后,也没有导入任何内容pom.xml.然后我"禁用maven nature"然后"转换为maven".现在导入了所有库,现在发生错误.当我包含pom.xml进入项目之前转换同样的错误发生.
奇怪的是,如果我然后"右击 - > maven->禁用maven性质"并删除所有maven库和文件,问题仍然存在.
所有这些都发生在一个新的示例项目(只是stanard活动和eclipse创建的xml)之后,我转换为maven并且maven libs在项目中,所以它显然与我的代码根本没有关系...
在pom.xml这个样子的
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>DynamixSSPBridge</groupId>
<artifactId>DynamixSSPBridge</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>DynamixSSPBridge</name>
<properties>
<java-version>1.6</java-version>
</properties>
<repositories>
<repository>
<id>itm-maven-repository-releases-site</id>
<url>https://maven.itm.uni-luebeck.de/content/repositories/releases/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>android</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>de.uniluebeck.itm</groupId>
<artifactId>ncoap</artifactId>
<version>1.0.1</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<sourceDirectory>src</sourceDirectory>
<pluginManagement>
<plugins>
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<version>3.1.1</version>
<extensions>true</extensions>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<configuration>
<sdk>
<platform>9</platform>
</sdk>
</configuration>
</plugin>
</plugins>
</build>
</project>
Run Code Online (Sandbox Code Playgroud)
另一个想法是创建一个具有特定android原型的maven项目,如此处所述.然而,这似乎不起作用,因为我总是得到"无法从原型创建项目"错误(见图片).创建一个非android maven项目是另一个糟糕的尝试,因为它不是一个Android项目它不解析Rx引用,并没有dex库...

有任何想法吗?
我也有同样的问题。我建议您仅依赖 Maven 命令,不要使用 IDE 进行任何操作(除了调试),因为它maven-android-plugin以自己的方式编译东西。
您可以将本地库 jar 文件(Maven 无法在线使用)安装到本地存储库:
例如,这里我们将无法在线获取的内容android.jar复制到我们计算机上的本地存储库:4.03
mvn install:install-file \
-Dfile=$ANDROID_HOME/platforms/android-15/android.jar \
-DgroupId=com.google.android \
-DartifactId=android \
-Dversion=4.0.3 \
-Dpackaging=jar \
-DgeneratePom=true
Run Code Online (Sandbox Code Playgroud)
现在我们可以将它包含在 POM 中:
<dependency>
<groupId>com.google.android</groupId>
<artifactId>android</artifactId>
<version>${platform.version}</version>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
Maven 将查找本地存储库并使用这些 jar 文件。
未包含类的问题(在我的例子中)是由<scope>POM 中的依赖关系错误引起的。因此,对于所有库的依赖项设置<scope>为compile.
尝试运行mvn clean、mvn install、 和mvn:android deploy。
只有当您能够在mvn没有任何 IDE 等的情况下从命令行运行您的 Maven 项目时,您的 Maven 项目才是好的。
| 归档时间: |
|
| 查看次数: |
5701 次 |
| 最近记录: |