草庐IT

android - 在 Eclipse 中转换为 Maven 项目导致 ClassNotFoundException

coder 2023-12-23 原文

我在 Eclipse Juno 中使用 m2eclipse 插件和 JDK 1.7(根据 Stack Overflow 上的一些搜索从 JRE 1.6 切换而来)。

新创建的基本 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 文件。

最佳答案

在我看来,为了避免这种情况,您不应该在 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并等待它构建。

顺便说一句,我很好奇你为什么有 <packaging>jar</packaging>在你的主要 android 项目中。你应该有 <packaging>apk</packaging> .更重要的是,Maven 可以在 JDK 7 上正常工作。

关于android - 在 Eclipse 中转换为 Maven 项目导致 ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17560193/

有关android - 在 Eclipse 中转换为 Maven 项目导致 ClassNotFoundException的更多相关文章

  1. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  2. ruby - 如何使用文字标量样式在 YAML 中转储字符串? - 2

    我有一大串格式化数据(例如JSON),我想使用Psychinruby​​同时保留格式转储到YAML。基本上,我希望JSON使用literalstyle出现在YAML中:---json:|{"page":1,"results":["item","another"],"total_pages":0}但是,当我使用YAML.dump时,它不使用文字样式。我得到这样的东西:---json:!"{\n\"page\":1,\n\"results\":[\n\"item\",\"another\"\n],\n\"total_pages\":0\n}\n"我如何告诉Psych以想要的样式转储标量?解

  3. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  4. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  5. Ruby 从大范围中获取第 n 个项目 - 2

    假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit

  6. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  7. Ruby 守护进程导致 ActiveRecord 记录器 IOError - 2

    我目前正在用Ruby编写一个项目,它使用ActiveRecordgem进行数据库交互,我正在尝试使用ActiveRecord::Base.logger记录所有数据库事件具有以下代码的属性ActiveRecord::Base.logger=Logger.new(File.open('logs/database.log','a'))这适用于迁移等(出于某种原因似乎需要启用日志记录,因为它在禁用时会出现NilClass错误)但是当我尝试运行包含调用ActiveRecord对象的线程守护程序的项目时脚本失败并出现以下错误/System/Library/Frameworks/Ruby.frame

  8. ruby - 从另一个私有(private)方法中使用 self.xxx() 调用私有(private)方法 xxx,导致错误 "private method ` xxx' called” - 2

    我正在尝试获得良好的Ruby编码风格。为防止意外调用具有相同名称的局部变量,我总是在适当的地方使用self.。但是现在我偶然发现了这个:classMyClass上面的代码导致错误privatemethodsanitize_namecalled但是当删除self.并仅使用sanitize_name时,它会起作用。这是为什么? 最佳答案 发生这种情况是因为无法使用显式接收器调用私有(private)方法,并且说self.sanitize_name是显式指定应该接收sanitize_name的对象(self),而不是依赖于隐式接收器(也是

  9. ruby - 如何在 Ruby 字符串中插入项目符号字符? - 2

    我正在尝试创建一个带有项目符号字符的Ruby1.9.3字符串。str="•"+"helloworld"但是,当我输入它时,我收到有关非ASCII字符的语法错误。我该怎么做? 最佳答案 你可以把Unicode字符放在那里。str="\u2022"+"helloworld" 关于ruby-如何在Ruby字符串中插入项目符号字符?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1195

  10. ruby - 如何在ruby中转换为big endian - 2

    我有一个小端顺序的字符串,作为十六进制编码的字符串000000020597ba1f0cd423b2a3abb0259a54ee5f783077a4ad45fb6200000218000000008348d1339e6797e2b15e9a3f2fb7da08768e99f02727e4227e02903e43a42b31511553101a051f3c00000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000我想将每个32位block从l

随机推荐