net.ltgt.gwt.maven 和 org.codehaus.mojo GWT Maven 插件有什么区别?
What is the difference between net.ltgt.gwt.maven and org.codehaus.mojo GWT Maven plugins?
显然,GWT 有两个 Maven 插件:
这个:
<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>
有什么区别?
免责声明:我是 org.codehaus.mojo
插件的前维护者,也是 net.ltgt.gwt.maven
插件的作者。
这些插件使用 GWT 和 Maven 的方法非常不同;我会尝试在这里总结最重要的。
首先,org.codehaus.mojo
绑定到特定版本的 GWT;这意味着每当发布新版本的 GWT 时都必须发布新版本的插件以解决差异。另一方面,它公开了所有 GWT options/flags 作为配置属性,以及 Maven 文档 (mvn gwt:help
) 等。当插件中的错误被修复时,这也意味着您必须更新 GWT 版本以匹配下一个插件版本使用的版本;虽然您确实应该始终使用最新的 GWT 版本,但由于其他依赖项与新版本不兼容等原因,可能无法快速更新。因此您可能处于 "version conflict hell".
net.ltgt.gwt.maven
插件旨在与 GWT 的 2 个最新版本兼容,但可能与更多版本兼容(只是未经测试/保证);这意味着您可以独立于 GWT 更新插件。
org.codehaus.mojo
插件带来了 gwt-dev
和 gwt-user
(以及 gwt-servlet
!)依赖项,如果不完全相同,这可能会导致与项目依赖项的冲突;此外,由于 Maven 的工作方式,如果您在不同的 groupId
下使用自己的 GWT 分叉版本,则不能将它们从插件的依赖项中排除(您必须使用 com.google.gwt
groupId
, 或者 fork 插件来改变它的依赖is).
net.ltgt.gwt.maven
插件附带 gwt-lib
和 gwt-app
的自定义 packaging
。关于 GWT 应用程序应该如何使用 Maven 完成的观点非常固执:将客户端和服务器(和共享)代码分离到单独的 Maven 模块中(这实际上遵循 The Maven Way™:如果您需要单独的类路径,那么您需要使用不同的 Maven 模块,每个都有它们的依赖关系)。您当然不会被迫使用这些包装,它们只是通过设置适当的默认值和约定来减少 POM 中的大量配置。
最后,由于上述关于 "project layout" 的观点,net.ltgt.gwt.maven
插件旨在支持多模块(又名反应器)构建,与 org.codehaus.mojo
相反插件,例如,在客户端和服务器代码都为 "live" 的项目中,gwt:run
必须为 运行;导致多模块构建中出现可怕的黑客攻击,例如必须 mvn install
所有依赖模块(因为 gwt:run
无法在聚合器模块上调用)并使用 build-helper-maven-plugin
从无缝开发体验的其他模块。
您可以在 gwt-maven-archetypes(免责声明:我是作者)上的 this commit 中看到插件之间的差异,这些插件是从 org.codehaus.mojo
到 net.ltgt.gwt.maven
插件。
显然,GWT 有两个 Maven 插件:
这个:
<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>
有什么区别?
免责声明:我是 org.codehaus.mojo
插件的前维护者,也是 net.ltgt.gwt.maven
插件的作者。
这些插件使用 GWT 和 Maven 的方法非常不同;我会尝试在这里总结最重要的。
首先,org.codehaus.mojo
绑定到特定版本的 GWT;这意味着每当发布新版本的 GWT 时都必须发布新版本的插件以解决差异。另一方面,它公开了所有 GWT options/flags 作为配置属性,以及 Maven 文档 (mvn gwt:help
) 等。当插件中的错误被修复时,这也意味着您必须更新 GWT 版本以匹配下一个插件版本使用的版本;虽然您确实应该始终使用最新的 GWT 版本,但由于其他依赖项与新版本不兼容等原因,可能无法快速更新。因此您可能处于 "version conflict hell".
net.ltgt.gwt.maven
插件旨在与 GWT 的 2 个最新版本兼容,但可能与更多版本兼容(只是未经测试/保证);这意味着您可以独立于 GWT 更新插件。
org.codehaus.mojo
插件带来了 gwt-dev
和 gwt-user
(以及 gwt-servlet
!)依赖项,如果不完全相同,这可能会导致与项目依赖项的冲突;此外,由于 Maven 的工作方式,如果您在不同的 groupId
下使用自己的 GWT 分叉版本,则不能将它们从插件的依赖项中排除(您必须使用 com.google.gwt
groupId
, 或者 fork 插件来改变它的依赖is).
net.ltgt.gwt.maven
插件附带 gwt-lib
和 gwt-app
的自定义 packaging
。关于 GWT 应用程序应该如何使用 Maven 完成的观点非常固执:将客户端和服务器(和共享)代码分离到单独的 Maven 模块中(这实际上遵循 The Maven Way™:如果您需要单独的类路径,那么您需要使用不同的 Maven 模块,每个都有它们的依赖关系)。您当然不会被迫使用这些包装,它们只是通过设置适当的默认值和约定来减少 POM 中的大量配置。
最后,由于上述关于 "project layout" 的观点,net.ltgt.gwt.maven
插件旨在支持多模块(又名反应器)构建,与 org.codehaus.mojo
相反插件,例如,在客户端和服务器代码都为 "live" 的项目中,gwt:run
必须为 运行;导致多模块构建中出现可怕的黑客攻击,例如必须 mvn install
所有依赖模块(因为 gwt:run
无法在聚合器模块上调用)并使用 build-helper-maven-plugin
从无缝开发体验的其他模块。
您可以在 gwt-maven-archetypes(免责声明:我是作者)上的 this commit 中看到插件之间的差异,这些插件是从 org.codehaus.mojo
到 net.ltgt.gwt.maven
插件。