net.ltgt.gwt.maven和org.codehaus.mojo GWT Maven插件有什么区别?

zak*_*ine 6 java gwt maven gwt-maven-plugin

显然,GWT有两个maven插件:

这个:

<groupId>net.ltgt.gwt.maven</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>1.0-rc-6</version>
Run Code Online (Sandbox Code Playgroud)

还有这个:

<groupId>org.codehaus.mojo</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>2.8.0-SNAPSHOT</version>
Run Code Online (Sandbox Code Playgroud)

有什么区别 ?

Tho*_*yer 12

免责声明:我是该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插件旨在与2个最新版本的GWT兼容,但可能与更多版本兼容(它只是没有经过测试/保证); 这意味着您可以独立于GWT更新插件.
org.codehaus.mojo插件带来了gwt-devgwt-user(和gwt-servlet!)依赖项,如果不是严格相同的话,可能会导致与项目依赖项的依赖项发生冲突; 另外,由于Maven的工作方式,如果你在不同的情况下使用你自己的分叉版本的GWT,你就不能将它们从插件的依赖项中排除groupId(你必须使用com.google.gwt groupId或者插入插件来改变它的依赖性).

net.ltgt.gwt.maven插件附带自定义packagings gwt-libgwt-app.关于如何使用Maven完成GWT应用程序的观点非常明确:将客户端和服务器(和共享)代码分离到单独的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.mojonet.ltgt.gwt.maven