gpt4 book ai didi

java - JAXWS : Why would one generate the client code within maven through jaxws-maven-plugin?

转载 作者:行者123 更新时间:2023-11-30 07:14:26 25 4
gpt4 key购买 nike

我一直使用 wsimport 工具从 WSDL 文件生成客户端类。然后我将它们包含到项目的源代码树中,并将它们 checkin 版本控制系统。但最近我了解到有一个名为 jaxws-maven-plugin 的 maven 插件可以在构建步骤中生成客户端类 (mvn clean jaxws:wsimport)。

虽然我不清楚使用这个插件的真正好处是什么,除了不需要将 WS 客户端类检查到源代码管理中。尽管如此,如果有人想在该项目上工作,他必须 check out 代码,然后运行 ​​mvn jaxws:wsimport 然后才能开始工作(否则 IDE 将显示错误)。那么真正的好处是什么?什么时候应该使用插件而不是将客户端代码 checkin VCS?

最佳答案

maven 插件的执行可以在构建步骤中自动触发,例如在编译项目之前,maven 构建周期中有一个专门的“生成源代码”阶段。因此,开发人员不必记住手动生成它,让您更接近理想的一键式完整构建。

优点是,您可以从 VCS 中排除生成的类,因为它们可以按需重新生成。 VCS 中生成代码的问题是,WSDL 文件中的更改将触发生成代码中的更改(很明显)。但是由于您首先处理契约(Contract),因此只有 WSDL 文件中的更改是相关的。从 VCS 中排除生成的代码将从 VCS 提交日志中隐藏其中的冗余更改。您的 VCS 存储库更小,提交日志更清晰。

针对评论进行编辑:恕我直言,对于这种情况有两种不同的看法:

1) 客户端类与服务接口(interface)的兼容性。

我不确定,如果客户端类能够与 WS 通信,如果它们是从旧的 wsdl 生成的。如果更改仅限于其他方法并且不触及现有定义,我认为它可能有效。尽管如此,如果客户端代码始终在构建时重新生成,则这不是问题,因为客户端代码会自动与 wsdl 同步。

2) 实现与客户端类的兼容性。

如果生成的客户端类发生变化,由于修改了 wsdl,这可能会破坏使用客户端类的代码。但是,如果只有方法添加到 wsdl 而现有方法保持原样,那么重新生成的客户端类因此应该与现有代码向后兼容。在您的示例中:如果您的代码仅使用 A(),并且"new"客户端类现在除了 A() 之外还提供 B() ,您的代码应该仍然有效。

总结;从 VCS 中排除生成的客户端代码,而是作为构建过程的一部分按需生成它,在我看来,如果 WSDL 演进是向后兼容的,应该不会破坏现有的功能代码。如果 WSDL 更改不向后兼容,编译时就会出现错误。但这些是不可避免的 - 使用来自 VCS 的过时客户端类实际上可能会隐藏这些错误,直到您尝试执行应用程序。

关于java - JAXWS : Why would one generate the client code within maven through jaxws-maven-plugin?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18466535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com