Java项目变得太大

时间:2015-05-09 13:44:49

标签: java maven ide build-process

我们有一个越来越大的Java 8 Spring Hibernate Maven项目。

问题:

  • 构建时间最多为10-12分钟; 3分钟未经测试
  • 我们已经有一个命令行开关来跳过很少修改的模块,这是构建过程达到实际限制的症状
  • Eclipse正在努力管理项目(尽管IntelliJ现在还可以)
  • 随着项目的发展,事情变得越来越严重,并且测试团队中的更多场景被作为代码库中的集成测试包含在内。

我们现在的工作方式

  • 该项目在大约20个Maven模块中配置,如下所示:
    Parent
    |--- Tier1
    |--- Tier2
    |--- WebTier
         |---- ModuleA
         |---- ModuleB
         |---- ModuleC
         |---- ...
         |---- Entities
         |---- Shared
         |---- Batch
         |---- IntegrationTests
  • 应用程序构建为单个WAR
  • 开发人员将单层(通常为WebTier)作为人工制品从Eclipse或IntelliJ部署到其本地Tomcat
  • 虽然项目似乎在模块中很好地分开,但它们之间存在许多不希望的耦合点。特别是在Shared中,模块需要"交叉模块"访问提供他们的服务
  • 所有集成测试都在专用模块中(不知道为什么)

让它变得更好的想法

  • 添加MessageBroker模块以允许松散耦合。也许是JMS,或者只是一个用于同步通信的哑内存组件
  • 摆脱Shared模块
  • 确保模块具有粗粒度入口点
  • 删除兄弟姐妹之间不需要的耦合,并在可能的情况下更喜欢消息代理
  • 可以保持Entities。至少核心业务实体(Customer,CustomerFile,...)。但是一些实体显然属于单个模块(批处理执行信息将在Batch模块中)

这样,任何对ModuleA进行更改的人都会在大多数情况下只在该模块中构建和运行测试,而不必担心会破坏应用程序。

问题

  • 这看起来像个好计划吗?好的,我的意思是面向未来,有很好的改善机会,并且不需要过多的工作情况
  • 我们每层应该有1个Eclipse / IJ项目吗,让IDE构建人工制品并将其部署到Tomcat,或者每个模块应该有1个项目,还有Nexus的依赖项?或者后一种选择可能有点过分?
  • 还有其他建议吗?

某些指标

  • Windows 7,Java 8,Maven 3.0.3,TestNG。
  • SSD或7200rpm HDD(影响有限)
  • 6Gb RAM
  • 堆1Gb(maven)
  • CI与Jenkins

非常感谢!

2 个答案:

答案 0 :(得分:1)

CI将是真正的答案,但它看起来你的项目不应该是模块化的。你不是每次都从头开始构建整个项目。您可以构建jar,在不同的项目中测试它们,然后将其用作单个项目。每个项目应该足够小,只覆盖一个区域。你认为Java构建在他们使用io包时会说安全罐吗?分而治之 - 这就是OOP和封装的全部理念。

答案 1 :(得分:0)

这可能没有您想象的那么糟糕。涉及单元测试和静态分析的项目需要一段时间。

我工作的公司有> 1小时构建+ unitTest + CodeCoverage集成时间。这不计算将工件运送到vSphere以便在26种语言x 8支持的操作系统上对安装程序进行自动点击测试所需的时间。