簡體   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