2013-07-09 40 views
4

我在Eclipse Juno中使用了m2eclipse插件,JDK 1.7(基于Stack Overflow上的一些搜索从JRE 1.6切换而来)。在Eclipse中转换为Maven项目的结果ClassNotFoundException

新创建时,裸机Android应用程序运行正常。但是,当我将其转换为Maven项目时,每当我尝试运行该应用程序时,我都会收到一个ClassNotFoundException异常。我尝试过更新项目,重新启动Eclipse,检查构建路径中的所有库,清理并重建项目,重新启动模拟器,并将我的pom.xml降至最低。

这个错误的原因是什么?这是Maven的一些简单的配置错误吗?

我的logcat:

07-09 23:07:18.027: D/AndroidRuntime(958): Shutting down VM 
07-09 23:07:18.027: W/dalvikvm(958): threadid=1: thread exiting with uncaught exception (group=0x409c01f8) 
07-09 23:07:18.137: E/AndroidRuntime(958): FATAL EXCEPTION: main 
07-09 23:07:18.137: E/AndroidRuntime(958): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.myproject/com.example.myproject.MainActivity}: java.lang.ClassNotFoundException: com.example.myproject.MainActivity 
07-09 23:07:18.137: E/AndroidRuntime(958): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1880) 
07-09 23:07:18.137: E/AndroidRuntime(958): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
07-09 23:07:18.137: E/AndroidRuntime(958): at android.app.ActivityThread.access$600(ActivityThread.java:123) 
07-09 23:07:18.137: E/AndroidRuntime(958): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
07-09 23:07:18.137: E/AndroidRuntime(958): at android.os.Handler.dispatchMessage(Handler.java:99) 
07-09 23:07:18.137: E/AndroidRuntime(958): at android.os.Looper.loop(Looper.java:137) 
07-09 23:07:18.137: E/AndroidRuntime(958): at android.app.ActivityThread.main(ActivityThread.java:4424) 
07-09 23:07:18.137: E/AndroidRuntime(958): at java.lang.reflect.Method.invokeNative(Native Method) 
07-09 23:07:18.137: E/AndroidRuntime(958): at java.lang.reflect.Method.invoke(Method.java:511) 
07-09 23:07:18.137: E/AndroidRuntime(958): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
07-09 23:07:18.137: E/AndroidRuntime(958): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
07-09 23:07:18.137: E/AndroidRuntime(958): at dalvik.system.NativeStart.main(Native Method) 
07-09 23:07:18.137: E/AndroidRuntime(958): Caused by: java.lang.ClassNotFoundException: com.example.myactivity.MainActivity 
07-09 23:07:18.137: E/AndroidRuntime(958): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61) 
07-09 23:07:18.137: E/AndroidRuntime(958): at java.lang.ClassLoader.loadClass(ClassLoader.java:501) 
07-09 23:07:18.137: E/AndroidRuntime(958): at java.lang.ClassLoader.loadClass(ClassLoader.java:461) 
07-09 23:07:18.137: E/AndroidRuntime(958): at android.app.Instrumentation.newActivity(Instrumentation.java:1023) 
07-09 23:07:18.137: E/AndroidRuntime(958): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1871) 
07-09 23:07:18.137: E/AndroidRuntime(958): ... 11 more 

我的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>com.example</groupId> 
    <artifactId>myproject</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 
    <dependencies> 
<dependency> 
    <groupId>com.google.android</groupId> 
    <artifactId>android</artifactId> 
    <version>4.1.1.4</version> 
    <scope>provided</scope> 
</dependency> 
    </dependencies> 
    <build> 
    <sourceDirectory>src</sourceDirectory> 
    <plugins> 
     <plugin> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.0</version> 
     <configuration> 
      <source>1.7</source> 
      <target>1.7</target> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

我MainActivity.java:

package com.example.myproject; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 

更新:我发现试图在pom.xml上执行Maven Clean和Maven generate-sources成功。然而,Maven的安装给我一个错误:

[ERROR] COMPILATION ERROR : 
[INFO] ------------------------------------------------------------- 
[ERROR] MainActivity.java:[12,33] package R does not exist 
[ERROR] MainActivity.java:[18,44] package R does not exist 

我还添加了一些东西(依赖性和包装)以及修改(1.6-> 1.7,3.1-> 3.0)在pom.xml文件这是最新的编辑。

+0

JRE 1.6不足,但是,Oracle JDK 1.6是Android开发文档正式推荐的版本,而不是JDK 1.7。无论如何,这可能不是导致这个特定错误的原因,尽管最终你最好切换回Oracle JDK 1.6。 –

+0

这是有点尴尬的情况,因为Oracle建议使用1.7,因为他们不更新它们的1.6。 Kind of catch 22. – BLaZuRE

+0

也许[本文](http://www.vogella.com/articles/AndroidBuildMaven/article.html)可以提供帮助。 –

回答

1

在我看来,为了避免出现这种情况,您不应该在Eclipse中创建一个新项目,然后将其转换为maven,而是使用maven从头开始创建android项目。另外,总是在终端中构建你的项目(以防万一),因为m2eclipse不时会产生错误,特别是在复杂的项目中。

试试这个(中端):

  1. 做一个文件夹,例如。 myMvnProjects。
  2. 转到此文件夹。
  3. 类型:mvn archetype:generate
  4. 选择de.akquinet.android.archetypes:android-quickstart (Creates a skeleton for an Android application)(或其他 - 这取决于您的需求)。
  5. 提供基本参数(平台,groupId,artifactId,版本等)
  6. 单击输入(或在Mac上返回)就是这样 - Maven为您生成一个简单的项目。
  7. 类型:mvn clean install并等到它建立。

顺便说一句,我很好奇你为什么在你的主要Android项目中有<packaging>jar</packaging>。你应该有<packaging>apk</packaging>。更重要的是,Maven在JDK 7中没有任何问题。

相关问题