2013-07-09 2 views
4

Я использую плагин m2eclipse в Eclipse Juno, с JDK 1.7 (переключается с JRE 1.6 на основе некоторых поисков в переполнении стека).Преобразование в проект Maven в Eclipse приводит к 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; 
    } 

} 

Обновление: Я обнаружил, что попытка создания источников Maven Clean и Maven с успехом выполняется на pom.xml. Однако, 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. Kindof catch 22. – BLaZuRE

+0

Возможно [эта статья] (http://www.vogella.com/articles/AndroidBuildMaven/article.html) может помочь. –

ответ

0

Вы не можете просто создать банку в maven и развернуть ее на своем устройстве, ожидая, что андроид будет работать, android использует специальный компилятор и сжатие jar. что-то вроде этого может помочь: http://books.sonatype.com/mvnref-book/reference/android-dev.html

1

На мой взгляд, чтобы избежать таких ситуаций, вы не должны создавать новый проект в Eclipse, а затем преобразовывать его в maven, но создавать проект андроида с maven с нуля. Кроме того, всегда создавайте свои проекты также в терминале (на всякий случай), потому что 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 и ждать, пока он не будет построен.

Кстати, мне любопытно, почему у вас есть <packaging>jar</packaging> в вашем главном проекте андроида. У вас должно быть <packaging>apk</packaging>.Более того, Maven работает без проблем с JDK 7.

Смежные вопросы