gpt4 book ai didi

java - Spring作为子java项目的父项目?

转载 作者:行者123 更新时间:2023-12-02 06:04:31 25 4
gpt4 key购买 nike

我有一个现有的 spring 项目,我想开发一个不同的项目,重用一些业务逻辑。我特别想合并这两个项目:

  • 一些 Maven pom 依赖版本(hibernate、spring、validation、jmx、servlet、连接池)。然后可以在每个子项目中自定义数据库 url 和 c3p0-settings 等内容,而无需重新定义其设置。

  • 基本的 applicationContext.xml,支持类路径扫描、注释、事务、异步、调度程序。理想情况下,我在某种父项目中预先配置它,并且所有继承/子项目都可以自动使用 @Autowired,而无需提供额外的 context.xml 文件。

  • 一个 spring ContextLoaderListener,负责有序关闭应用程序(例如保存终止所有数据库或当前正在运行的 Web 服务请求)

  • 委托(delegate)给服务实现的 Spring 管理的 TCP 套接字网关

所有这些东西都应该在我的第二个应用程序中重复使用。我现在当然可以复制粘贴/复制我想重用的所有内容。但这有一个显着的缺点:我希望能够更改“共享”内容中的任何内容,并且它应该对两个应用程序都有影响。

例如,如果我更新 maven pom 中的 Spring.version,两个应用程序都应该获得新版本。另外,如果我更改套接字网关等中的任何内容。

您能告诉我如何实现这一目标吗?

最佳答案

这对于您的需求来说可能有点过分了,但这就是我在由许多组件组成的系统上使用/已经使用 Maven 的方式:

  • 创建一个父 POM,在 dependencyManagement 部分中声明系统中使用的所有依赖项(包括内部依赖项和第 3 方)。
  • 在同一个父 POM 的 pluginspluginManagement 部分中包含常用插件。
  • 每个组件 POM 都应该指向这个父组件,在 dependencies 部分重新声明每个组件需要的依赖项。重要的是,版本可以省略,因为它是从父 POM 获取的。
  • 尽可能晚地将组件连接在一起,以最大限度地提高每个组件的可移植性。这通常意味着创建一个通用程序集,该程序集组合了组件并形成环境特定程序集的基础。

要避免的事情:

  • 不要使用版本属性,它们可以从命令行覆盖,这意味着您在查看 Nexus(或类似存储库)时无法得知部署的 Artifact 是如何构建的。
  • 不要在父 POM 中使用模块,这会将所有模块锁定在同一构建和发布周期中。虽然这可能会使版本控制检查和构建看起来很容易,但这意味着您不能(轻松)单独发布模块/组件,例如当您需要时修补错误。

关于java - Spring作为子java项目的父项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22410834/

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