繁体   English   中英

无法使用Eclipse,Maven和适用于Maven的Android插件编译应用程序

[英]Can't compile an application using Eclipse, Maven, and the Android Plugin for Maven

我正在尝试使用Maven插件和m2eclipse-android-plugin在Eclipse中创建一个Android应用程序。 直到最近,事情一直“顺利”。 我在Ubuntu上使用Helios,并具有最新的JDK(已删除Ubuntu所安装的默认JDK)。

该项目引用了我也创建的两个库。 一个是Android特定的实用程序项目,并成功生成.apklib。 另一个库是一组通用用途更广的实用程序,并非专用于生成JAR文件的Android。 这两个项目都是使用Eclipse的Maven插件构建的。 另外,我已经验证了.apklib和.jar文件都在本地存储库中,并且都包含了所有预期生成的类文件。

当构建.apk文件时,我在Android项目中的类上收到“找不到符号”,其中该符号是非Android实用程序JAR文件中的类。 由于某些完全奇怪的原因,无法在JAR文件中找到类文件。 我验证了,实际上,该JAR文件位于我的本地Maven存储库中,并且该类文件位于JAR文件中。 我还运行了带有调试功能的maven install命令,将命令行复制到了Java编译器中。 当我在控制台中执行该命令时,会收到SAME错误(表明这是Java编译器错误而不是Maven错误)。

有人遇到过这种情况吗? 这非常奇怪,我已经完全整理了命令行以解决潜在问题,而且据我所知,一切似乎都是正确的。

好吧,通过似乎是反复试验的方法,我似乎已经解决了该问题。 我有一个看起来与此类似的文件:

import Test.TestObserver;
import com.myself.ImportedClassThatCouldntBeFound;

class Test extends ImportedClassThatCouldntBeFound {
  public interface TestObserver {
    public void event ();
  }

  public void addObserver (TestObserver observer) {
    ...
  }
} 

public class AnotherTest {
  private Test test = new Test ();

  public void blah () {
    this.test.addObserver (new TestObserver () {
      public void event () {
        ...
      } 
    });
  }
}

问题发生在文件的TOP。 由于某种原因,Eclipse导入了内部接口!

当我“删除”该导入,然后将AnotherTest更改为:

public class AnotherTest {
  private Test test = new Test ();

  public void blah () {
    this.test.addObserver (new Test.TestObserver () {
      public void event () {
        ...
      } 
    });
  }
}

它编译正确! 我什至通过将导入BACK放到文件中并删除了完全声明的接口名称来进行验证,这导致它再次失败! 毫无疑问,这绝对是我所见过的最疯狂的编译器问题之一,一旦我一生失去了对这四个小时的研究,便会对其发生原因进行更多调查。

这将是我第一次在StackOverflow上执行此操作,但是我将其标记为解决方案,因为这绝对是问题所在。 但是,它肯定需要更多的研究(至少在我这方面),以尝试了解导致编译器变得如此混乱的原因。

编辑此代码以使具有内部接口的类扩展为编译时找不到的类

在我看来,这似乎是(最终)通过将两个顶级类放入单个源代码文件而引起的问题。 通常认为这是不好的做法

目前尚不清楚JLS是否规定了编译错误,是否是Java编译器中的错误。 但是,无论哪种方式,最好的解决方法是不要将多个类放入一个源文件中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM