Используйте компилятор eclipse в компоненте maven - PullRequest
12 голосов
/ 27 июня 2011

Я работаю над довольно крупным проектом Maven и разрабатываю на Java с Eclipse.

Чтобы сэкономить время компиляции, я бы хотел, чтобы Maven и Eclipse использовали одну и ту же цель, что мне удалось сделать.Однако когда я компилирую с Maven, Eclipse не хватает некоторых вещей, которые он вставляет в байт-код, поэтому он перекомпилирует все (из того, что я понимаю).Я говорю здесь о функции «автоматически создавать», поэтому Eclipse не делегирует сборку Maven.

Чтобы решить эту проблему, я решил попросить Maven использовать тот же компилятор, что и Eclipse.После некоторого поиска в Интернете я обнаружил, что могу добавить это в топ pom:

<build>
...
<plugins>
...
<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-compiler-plugin</artifactId>
   <configuration>
           <compilerId>eclipse</compilerId>
           <source>1.5</source>
           <target>1.5</target>
           <optimize>true</optimize>
   </configuration>
   <dependencies>
           <dependency>
                   <groupId>org.codehaus.plexus</groupId>
                   <artifactId>plexus-compiler-eclipse</artifactId>
                   <version>1.8.1</version>
           </dependency>
   </dependencies>
</plugin>
</plugins>
</build>

Это похоже на работу, но сборка завершается неудачей довольно быстро с большим количеством ошибок, в то время как это удается сJavac.Я не уверен, почему, но кажется, что есть некоторые конфликты, связанные с тем фактом, что сбойные файлы Java являются сгенерированными файлами.

Так что я подумал, что могу попытаться использовать компилятор Eclipse только для компонента, которым я являюсьработает над (который не имеет такого рода сгенерированных файлов).Я добавил приведенный выше фрагмент в pom моего компонента, но когда сборка достигает моего компонента, возникает следующая ошибка:

Нет такого компилятора 'eclipse'

Я также пытался добавить зависимость plexus-compiler-eclipse в зависимости, перечисленные в верхней части списка, но та же ошибка.

Знаете ли вы, возможно ли то, что я пытаюсь сделать?Любой намек на то, как я могу это сделать?

Ответы [ 4 ]

2 голосов
/ 17 марта 2015

Это старая открытая проблема, связанная с многомодульными проектами maven: http://jira.codehaus.org/browse/MCOMPILER-165

1 голос
/ 27 июня 2011

Я думаю, что ваши проблемы возникают из-за того, что проект eclipse и maven pom не синхронизированы. Я бы посоветовал вам использовать плагин m2eclipse , чтобы синхронизировать maven и eclipse. Это настроит ваш проект eclipse, используя POM в качестве «основной» конфигурации.

Я не думаю, что вам нужно специально настраивать, какой компилятор использовать, но вы должны настроить плагин maven-compiler-plugin, как вы уже это делаете.

0 голосов
/ 21 февраля 2012

Убедитесь, что вы используете последнюю версию maven-compiler-plugin (2.3.2 прямо сейчас, см. Эту страницу - это «Полное имя» или маленькая информация о версии в верхнем правом углу).

Помимо этого, конфигурация должна работать.Вы также можете попробовать последнюю версию plexus-compiler-eclipse версии 1.8.4.

Кроме того, вы должны понимать, что Maven имеет несколько типов зависимостей.В вашем случае интересны две: зависимости времени сборки и плагина.

Первые собраны в элементе dependencies , а последние должны быть в pluginManagementэлемент .Добавление плагина в classpath времени сборки не даст желаемого эффекта.

0 голосов
/ 28 июня 2011

Я не уверен на 100%, чего вы пытаетесь достичь, но это звучит как плохая идея.Во-первых, вы должны настроить Eclipse на использование SDK в вашей системе, а Maven должен использовать то же самое.Поэтому я не понимаю, почему вы думаете, что Eclipse добавляет что-то к байтовому коду, что Maven не получил бы, поскольку они оба используют один и тот же компилятор.

Во-вторых, я не буду пытаться использовать какие-либо компоненты Eclipse в сборке maven.Они предназначены для работы в Eclipse IDE, поэтому их работа вне этого обычно сопряжена с проблемами.Я видел, как это было сделано, но это был взлом и не дал очень хороших результатов.

Вскоре, если у вас проблемы с производительностью сборки Maven (не редкость), есть несколько вещей, которые вы можетеделать.Сначала разбейте сборку и определите, куда идет время.Мой опыт показывает, что обычно проблема не в компиляции.Вот список вещей, которые я видел в медленных сборках:

  • Тесты плохого качества.Обычно медленно запускаются интеграционные тесты, составленные из тестов, которые на самом деле являются модульными тестами, выполняемыми в виде интеграций.

  • Cobertura.Отличный инструмент, но из-за того, как работает Maven, плагину Cobertura приходится снова запускать все фазы от ресурсов до компиляции.Однажды я сбрил 40% во время долгой сборки Maven, написав плагин, чтобы прекратить выполнение тестов до тех пор, пока они не будут выполнены фазой cobertura.

  • За здание.то есть.включая подмодули, которые в основном никогда не меняются.Лучший выбор - создать профиль, который включает эти субмобулы, только когда это необходимо, или перейти к полностью отдельной сборке.

  • Длительное интеграционное тестирование.Если тесты интеграции занимают много времени, рассмотрите возможность помещения их в другой профиль и в другую сборку на сервере CI.Тогда ваша основная сборка может работать быстрее, что позволит разработчикам быстрее вернуться к работе, в то время как интеграционные тесты могут выполняться реже.

  • Наконец - признайте, что Maven - это снижение производительности, и переходите к чему-тоБыстрее.Ant, вероятно, по-прежнему самый быстрый, но его сложно настроить, потому что вам приходится все вручную настраивать.Я бы посоветовал попробовать Grandle , так как он устраняет многие проблемы, которые есть у Ant и Maven.Хотя, честно говоря, я лично не проводил тестирование производительности на нем.Но это дает вам такой уровень контроля, которого не имеет Maven.

...