Spring作为子java项目的父级?

时间:2014-03-14 16:35:14

标签: java spring maven

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

  • 一些maven pom依赖版本(hibernate,spring,validation,jmx,servlet,connection pooling)。然后可以在每个子项目中自定义数据库URL和c3p0设置等内容,但无需重新定义其设置。

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

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

  • 一个委托给服务实现的spring托管tcp套接字网关

所有这些东西都应该在我的第二个申请中重复使用。我现在当然可以复制/发布我想要重用的所有内容。但这有一个明显的缺点:我希望能够改变“共享”中的任何内容。内容,它应该对这两个应用程序产生影响。

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

你能告诉我如何实现这个目标吗?

1 个答案:

答案 0 :(得分:2)

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

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

要避免的事情:

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