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-devgwt-user(以及 gwt-servlet!)依赖项,如果不完全相同,这可能会导致与项目依赖项的冲突;此外,由于 Maven 的工作方式,如果您在不同的 groupId 下使用自己的 GWT 分叉版本,则不能将它们从插件的依赖项中排除(您必须使用 com.google.gwt groupId, 或者 fork 插件来改变它的依赖is).

net.ltgt.gwt.maven 插件附带 gwt-libgwt-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.mojonet.ltgt.gwt.maven 插件。