我正在我的应用程序中使用 SOAP Web 服务。我通过在构建时提供 wsdl 使用 Maven 生成 jaxb 类。现在,这些 wsdls 正在针对每个更高的环境(即开发、集成、阶段和产品)进行更改。
这意味着每次升级环境时我都必须构建我的项目。这将违反部署规则 - 测试的版本应该在环境中向上移动直到生产。
如何避免每次升级环境时重建应用程序,并且根据该环境的 wsdl 还具有 jaxb 类。
最佳答案
我相信不重新构建就不可能更改 JAXB 类。但是,我想知道 WSDL 的结构(不考虑数据值)是否随着环境的不同而变化?如果它是一个不同的 WSDL,显然您需要一个全新的构建。
在上述场景中,您可以使用Maven Profile功能。
如果它是相同的 WSDL(仅数据值根据环境而变化),那么您的代码逻辑应该足够通用,可以处理不同的可能数据值。如果是这样,单个构建应该可以在所有环境中运行。
编辑 - 根据 Op 评论
Yes I am using maven profile for environment based build. And, the wsdl structure is going to be same across the environments so code break is not a problem. I was just wondering if there is way to this scenario.
根据评论,我觉得它不是一个构建
相关领域,而是与以下假设的 Artifact 部署
相关:
- 一旦在测试环境中进行了测试,该构建就可以在其他环境中完美运行。
- 构建将能够根据外部提供的参数选择正确的内部配置。例如如果 Java 应用程序构建具有
env-dev.config
和env-prod.config
文件,则基于 JVM 标志-Denv=prod
>;它应该在运行时
选择正确的配置文件。
有了这个假设,您就不需要 Maven 配置文件了。现在开始部署,您可以使用某种网络商店
。例如一个 Maven 存储库。 deployment
脚本应从 webstore
中选取 Artifact 并进行部署。
流程可概括为:
- 使用
Jenkin
等 CI(持续集成)工具进行测试
构建。 - 在 CI 工具中,作为构建后步骤的一部分,将 Artifact 上传到
网络商店
。例如。您可以上传到本地 Maven 存储库服务器。 - 作为部署的一部分,部署脚本将从
webstore
获取
Artifact 并部署在测试
环境中。 - 通过上述机制将 Artifact 部署在测试环境上。执行测试。
- 如果在测试过程中发现错误,请修复错误并通过 CI 工具重新构建/部署。
- 再次使用 CI 工具进行
stage/prod
部署。请注意,您只需跳过构建过程即可。这将是一个仅部署的过程。 - 部署过程应始终选择最新版本(或可配置版本)。所以,版本控制是一个重要的方面。
关于java - 不同环境使用不同的 WSDL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49245077/