net.ltgt.gwt.maven 和 org.codehaus.mojo 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选项/标志公开为配置属性,并使用Maven文档(mvn gwt:help)等。当插件中的错误被修复时,这也意味着您必须更新您的 GWT 版本以匹配下一个插件版本使用的版本;虽然您确实应该始终使用最新的GWT版本,但由于其他依赖项与新版本不兼容等原因,可能无法快速更新,因此您可能处于"版本冲突地狱"。
net.ltgt.gwt.maven插件旨在与 GWT 的 2 个最新版本兼容,但可能与更多版本兼容(只是没有经过测试/保证);这意味着您可以独立于 GWT 更新插件。
org.codehaus.mojo插件带来了gwt-devgwt-user(以及gwt-servlet!)依赖项,如果不完全相同,可能会导致与项目依赖项中的依赖项发生冲突; 此外,由于 Maven 的工作方式,如果您在不同的groupId下使用自己的 GWT 分支版本,则无法将它们从插件的依赖项中排除(您必须使用com.google.gwtgroupId, 或分叉插件以更改其依赖关系是)。

net.ltgt.gwt.maven插件带有自定义packaging,用于gwt-libgwt-app。关于如何使用Maven完成GWT应用程序,这是非常固执己见的:将客户端和服务器(和共享)代码分离到单独的Maven模块中(这实际上是遵循Maven的方式™:如果您需要单独的类路径,那么您需要使用不同的Maven模块,每个模块都有其依赖项)。当然,您不会被迫使用这些包装,它们只是通过设置适当的默认值和约定来减少POM中的相当多的配置。

最后,由于上述关于"项目布局"的观点,net.ltgt.gwt.maven插件旨在支持多模块(又名 reactor)构建,与org.codehaus.mojo插件相反,例如,gwt:run必须在客户端和服务器代码"存在"的项目上运行;导致多模块构建中的可怕黑客攻击,例如必须mvn install所有依赖项模块(因为无法在聚合器模块上调用gwt:run)并使用build-helper-maven-plugin从其他模块引入客户端资源,以获得无缝的开发体验。

您可以在从org.codehaus.mojo切换到net.ltgt.gwt.maven插件的 gwt-maven-archetypes(免责声明:我是作者)上看到此提交中的插件之间的差异。

相关内容

  • 没有找到相关文章

最新更新