显然,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
绑定(bind)到特定版本的 GWT;这意味着每当发布新版本的 GWT 时都必须发布新版本的插件以解决差异。另一方面,它通过 Maven 文档 (mvn gwt:help
) 等公开所有 GWT 选项/标志作为配置属性。当插件中的错误被修复时,这也意味着您必须更新 GWT 版本以匹配下一个插件版本使用的版本;虽然您确实应该始终使用最新的 GWT 版本,但由于其他依赖项与新版本不兼容等原因,可能无法快速更新,因此您可能陷入“版本冲突 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 插件来改变它的依赖)。
net.ltgt.gwt.maven
插件带有用于 gwt-lib
和 gwt-app< 的自定义
。关于 GWT 应用程序应该如何使用 Maven 完成的观点非常固执:将客户端和服务器(和共享)代码分离到单独的 Maven 模块中(这实际上遵循 The Maven Way™:如果您需要单独的类路径,那么您需要使用不同的 Maven 模块,每个都有它们的依赖关系)。您当然不会被迫使用这些包装,它们只是通过设置适当的默认值和约定来减少 POM 中的大量配置。packaging
/
最后,由于上述关于“项目布局”的自以为是的观点,net.ltgt.gwt.maven
插件被设计为支持多模块(aka reactor)构建,与org.codehaus.mojo
插件,例如,gwt:run
必须在客户端和服务器代码都“在线”的项目上运行;导致多模块构建中出现可怕的黑客攻击,例如必须 mvn install
所有依赖模块(因为不能在聚合器模块上调用 gwt:run
)并使用 build-helper-maven-plugin
从其他模块引入客户端源以实现无缝开发体验。
您可以在 this commit 中看到插件之间的差异在从 org.codehaus.mojo
切换到 net.ltgt.gwt 的 gwt-maven-archetypes(免责声明:我是作者)上。 maven
插件。
关于java - net.ltgt.gwt.maven 和 org.codehaus.mojo GWT Maven 插件有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37910365/