В чем разница между плагинами net.ltgt.gwt.maven и org.codehaus.mojo GWT Maven?
По-видимому, есть два плагина maven для GWT:
Вот этот:
<groupId>net.ltgt.gwt.maven</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>1.0-rc-6</version>
и этот:
<groupId>org.codehaus.mojo</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>2.8.0-SNAPSHOT</version>
Какие есть отличия?
1 ответ
Отказ от ответственности: я бывший сопровождающий org.codehaus.mojo
плагин и автор net.ltgt.gwt.maven
один.
У плагинов очень разные подходы к использованию GWT с Maven; Я постараюсь обобщить наиболее важные из них здесь.
Во-первых, org.codehaus.mojo
привязан к конкретной версии GWT; это означает, что новая версия плагина должна выпускаться всякий раз, когда выпускается новая версия GWT, чтобы учесть различия. С другой стороны, он предоставляет все параметры / флаги GWT прямо как свойства конфигурации с документацией Maven (mvn gwt:help
) и другие. Если в плагине исправлена ошибка, это также означает, что вам необходимо обновить версию GWT, чтобы она соответствовала версии, используемой в следующей версии плагина; Хотя вам действительно всегда следует использовать последнюю версию GWT, обновление может оказаться невозможным из-за несовместимости других зависимостей с новой версией и т. д., поэтому вы можете оказаться в "аду конфликта версий".
net.ltgt.gwt.maven
плагин стремится быть совместимым с 2 последними версиями GWT, но, вероятно, совместим со многими другими (это просто не проверено / не гарантировано); это означает, что вы можете обновить плагин независимо от GWT.
org.codehaus.mojo
плагин приносит gwt-dev
а также gwt-user
(а также gwt-servlet
!) зависимости, которые могут вызвать конфликты с зависимостями проекта, если они не являются строго идентичными; Кроме того, из-за того, как работает Maven, вы не можете исключить их из зависимостей плагина, если вы используете собственную разветвленную версию GWT под другим groupId
(вам придется либо использовать com.google.gwt
groupId
или разветвите плагин, чтобы изменить его зависимость).
net.ltgt.gwt.maven
плагин поставляется с кастомом packaging
с для gwt-lib
а также gwt-app
, Он довольно самоуверен в том, как GWT-приложения должны выполняться с Maven: разделение клиентского и серверного (и общего) кода на отдельные модули Maven (на самом деле это следует из Maven Way™: если вам нужны отдельные пути к классам, то вам нужно использовать разные модули Maven. каждый со своими зависимостями). Вы, конечно, не обязаны использовать эти упаковки, они просто сокращают конфигурацию в POM, устанавливая соответствующие значения по умолчанию и соглашения.
Наконец, из-за того, что вышеупомянутое мнение о "макете проекта" net.ltgt.gwt.maven
Плагин предназначен для поддержки многомодульных (он же реакторных) сборок, в отличие от org.codehaus.mojo
плагин, где, например, gwt:run
должен быть запущен в проекте, где код клиента и сервера "жив"; приводя к ужасным взломам в многомодульных сборках, таких как необходимость mvn install
все модули зависимости (потому что gwt:run
не может быть вызван на модуле агрегатора) и с помощью build-helper-maven-plugin
использовать клиентские источники из других модулей для беспроблемного опыта разработки.
Вы можете увидеть различия между плагинами в этом коммите на gwt-maven-archetypes (заявление об отказе: я автор), который переключился с org.codehaus.mojo
к net.ltgt.gwt.maven
плагин.