免责声明:我是该插件的前维护者,也是该org.codehaus.mojo
插件的作者net.ltgt.gwt.maven
。
这些插件在 Maven 中使用 GWT 的方法非常不同;我将尝试在这里总结最重要的一些。
首先,org.codehaus.mojo
它与特定版本的 GWT 相关联;这意味着每当发布新版本的 GWT 以解决差异时,都必须发布新版本的插件。另一方面,它通过 Maven 文档 ( mvn gwt:help
) 等公开所有 GWT 选项/标志作为配置属性。当插件中的错误被修复时,这也意味着您必须更新您的 GWT 版本以匹配下一个插件版本使用的版本;虽然您确实应该始终使用最新的 GWT 版本,但由于其他依赖项与新版本不兼容等原因,可能无法快速更新,因此您可能处于“版本冲突地狱”中。
这net.ltgt.gwt.maven
插件旨在与 GWT 的 2 个最新版本兼容,但可能与更多版本兼容(只是未经测试/保证);这意味着您可以独立于 GWT 更新插件。
该org.codehaus.mojo
插件带来了gwt-dev
and gwt-user
(and gwt-servlet
!) 依赖项,如果不严格相同,可能会与项目依赖项中的依赖项发生冲突;此外,由于 Maven 的工作方式,如果您在不同的环境下使用自己的分叉版本的 GWT groupId
(您必须使用com.google.gwt
groupId
, 或分叉插件来更改其依赖关系),则无法将它们从插件的依赖项中排除。
该net.ltgt.gwt.maven
插件带有自定义packaging
sgwt-lib
和gwt-app
。对如何使用 Maven 完成 GWT 应用程序非常有意见:将客户端和服务器(和共享)代码分离到单独的 Maven 模块中(这实际上是遵循 The 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