可以在构建步骤中自动触发Maven插件的执行,例如,在编译该项目之前,在Maven构建周期中专门设置了“生成源代码”阶段。因此,开发人员不必记住手动生成它,使您更接近理想的单击完整构建。
优点是,您可以从VCS中排除生成的类,因为它们可以根据需要重新生成。 VCS中生成的代码的问题在于,WSDL文件中的更改会触发生成的代码中的更改(显然)。但是,当您首先处理合同时,只有WSDL文件中的更改才是相关的。从VCS中排除生成的代码将隐藏VCS提交日志中的冗余更改。您的VCS存储库较小,提交日志更清晰。
编辑旨在评论: 恕我直言有对场景两种截然不同的观点:
1)服务接口的客户端类的兼容性。
我不确定,如果客户端类能够与WS通信,如果它们是从较旧的wsdl生成的。我认为它可能工作,如果更改仅限于其他方法,并不触及现有的定义。尽管如此,如果客户端代码总是在构建版本上重新生成,这是一个非问题,因为客户端代码自动与wsdl同步。
2)实现与客户端类的兼容性。
如果生成的客户端类由于修改的wsdl而发生更改,则可能会破坏使用客户端类的代码。但是,如果只有方法添加到wsdl并且现有方法保持原样,那么重新生成的客户端类应该与现有代码向后兼容。在你的例子中:如果你的代码只使用A(),并且“新”客户类现在向A()提供B()另外,你的代码仍然可以工作。
总之;不包括从VCS生成的客户端代码,而是根据需要生成它作为构建过程的一部分,在我看来,如果WSDL演进向后兼容,应该不会破坏现有的功能代码。如果WSDL更改不向后兼容,则编译时会发生错误。但这些都是不可避免的 - 使用来自VCS的过时客户端类可能会实际上隐藏这些错误,直到您尝试执行该应用程序。
因此,让我们说一个wsdl定义了一个我想使用的方法A()。我生成客户端类,开发代码,然后将所有内容签入VCS。与此同时,wsdl发生了变化,并且添加了一个新的方法B()。然后我将不得不生成一个新的客户端类并检查它们,否则代码将不起作用,即使我只使用A()? – Janek