Eclipse Builder несовместим с m2Eclipse и Maven - PullRequest
2 голосов
/ 22 сентября 2011

Я вижу проблему, из-за которой данный исходный файл, созданный Maven, создает файл класса, отличный от файла, созданного Eclipse.

Компоновщик Eclipse оптимизирует следующий метод:

public SomeClass clone() {
    SomeClass clone = (SomeClass) super.clone();
    return clone;
}

Этот метод, очевидно, не нужен, но у меня нет возможности изменить источник, потому что он генерируется.

Какой компоновщик использует Eclipse для компиляции этих классов?Я использую плагин m2Eclipse, который, как я думал, только что вызвал Maven для выполнения сборки.Почему же тогда Eclipse считает, что ему нужно выполнить другую сборку с другим компоновщиком?Могу ли я отключить этот Eclipse Builder или настроить его для предотвращения оптимизации?

  • Версия Eclipse: 3.7
  • m2Eclipse версия: 1.0.100.20110804-1717 (настроена для использования внешнего Maven)
  • Maven версия: 2.2.1

Обновление

Я нашел Отчет об ошибке Eclipse , который описывает, что происходит.Для пояснения, это на самом деле не компилятор Eclipse, который что-либо удаляет, а просто не вводит синтетический метод 'bridge', который представляет стандартный компилятор JDK.Отчет об ошибке помечен как исправленный, но не исправленный.

Я до сих пор не нашел способа предотвратить запуск Eclipse Builder после запуска Maven.Но наше исправление заключается в изменении генератора кода для добавления явного serialVersionUID к сгенерированному коду.

Ответы [ 2 ]

1 голос
/ 23 сентября 2011

У меня нет Eclipse 3.7, но я ожидаю, что эти вещи не изменились с 3.6.Если вы откроете Свойства -> Builder в своем проекте, вы увидите, что Maven Builder стоит последним или, по крайней мере, после Java Builder.Это означает, что когда Maven Builder видит ваши исходные файлы Java, они уже скомпилированы.Кстати, настроенный вами внешний Maven используется только тогда, когда вы выполняете Run as ->, а не при сборке с Maven.

Все это говорит о том, что то, что вы видите, скорее всего, связано с тем, что когда выдля компиляции из Eclipse используется внутренний компилятор Java, в то время как при запуске Maven из командной строки я ожидаю, что в зависимости от того, что вы установили, используется компилятор JDK.Я не думаю, что вы можете что-то сделать, чтобы изменить это положение вещей.Одна вещь, которую вы можете попробовать, - убедиться, что их поведение максимально приближено, указав в POM, какая версия Java должна быть совместима, добавив что-то вроде

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>2.3.2</version>
  <configuration>
    <source>1.6</source>
    <target>1.6</target>
  </configuration>
</plugin>

в раздел сборки.

Я должен сказать, что ожидал, что компилятору Java не будет разрешено удалять публичные методы из классов, даже если они бесполезны.

1 голос
/ 23 сентября 2011

Вы можете попробовать отключить Java Builder, если настроено для проекта.Вы можете проверить это, нажав на вкладку Builders в Project -> Properties.

Из справки Eclipse ...

Разработчик Java создает программы Java с использованием собственного компилятора (Eclipse Compiler for Java), который реализует спецификацию языка Java.

...