Не удается скомпилировать приложение, используя Eclipse, Maven и плагин Android для Maven. - PullRequest
0 голосов
/ 13 апреля 2011

Я пытаюсь создать приложение Android в Eclipse, используя плагин Maven и плагин m2eclipse-android-plugin.До недавнего времени дела шли хорошо.Я использую Helios в Ubuntu и у меня установлена ​​последняя версия JDK (удалена версия по умолчанию, установленная Ubuntu).

Проект ссылается на две библиотеки, которые я тоже создал.Один из них - это специализированный проект для Android, который генерирует файл .apklib (успешно).Другая библиотека - это набор утилит общего назначения, не относящихся к Android, который создает файл JAR.Оба эти проекта также построены с использованием плагина Maven для Eclipse.Кроме того, я проверил, что файлы .apklib и .jar находятся в локальном репозитории, и оба включили все сгенерированные файлы классов, как и следовало ожидать.

Когда дело доходит до сборки файла .apkЯ получаю «Не могу найти символ» в классе в моем проекте Android, где символ является классом из файла JAR утилиты, отличной от Android.По какой-то странной причине файл класса не может быть найден внутри файла JAR.Я проверил, что на самом деле файл JAR находится в моем локальном репозитории maven, а файл класса находится в файле JAR.Я также выполнил команду maven install с отладкой, скопировал командную строку, которая передается в компилятор Java.Когда я выполняю эту команду в консоли, я получаю ЖЕ ОШИБКУ (указывающую, что это ошибка компилятора Java, а не ошибка Maven).

Кто-нибудь еще сталкивался с подобной ситуацией раньше?Это чрезвычайно странно, и я полностью прочесал командную строку на предмет возможных проблем, и, насколько я могу судить, все кажется правильным.

Ответы [ 2 ]

0 голосов
/ 13 апреля 2011

Для меня это выглядит как проблема, вызванная (в конечном итоге) помещением двух классов верхнего уровня в один файл исходного кода.Обычно считается, что это плохая практика .

Неясно, предписана ли JLS ошибка компиляции, является ли это ошибкой в ​​компиляторе Java.Но в любом случае, лучшее решение - не помещать несколько классов в один исходный файл.

0 голосов
/ 13 апреля 2011

Что ж, с помощью метода проб и ошибок я, похоже, решил проблему. У меня был файл, который выглядел «похожим» на это:

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 () {
        ...
      } 
    });
  }
}

Проблема произошла в верхней части файла. По какой-то причине Eclipse импортировал внутренний интерфейс!

Когда я «УДАЛЁЛ» этот импорт, а затем изменил AnotherTest на:

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

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

правильно скомпилировано! Я даже проверил это, поместив BACK импорта в файл и удалив полностью объявленное имя интерфейса, и это снова привело к сбою! Это определенно одна из самых сумасшедших проблем компилятора, которые я когда-либо видел, и как только я вернусь к ЧЕТЫРЕМ ЧАСАМ моей жизни, которые я потерял, исследуя это, я проведу дополнительное расследование, почему это происходит.

Это будет первый раз, когда я сделаю это в StackOverflow, но я собираюсь пометить это как решение, потому что оно определенно было проблемой. Тем не менее, это определенно требует дополнительных исследований (по крайней мере, с моей стороны), чтобы попытаться понять, что заставило компилятор запутаться.

отредактировал это, чтобы показать, что класс с внутренним интерфейсом расширяет класс, который не может быть найден при компиляции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...