Java项目变得太大了

you*_*uri 5 java ide build-process maven

我们有一个庞大的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硬盘(影响有限)
  • 6Gb RAM
  • 堆1Gb(maven)
  • CI与詹金斯

谢谢你!

Ale*_*lex 1

CI 将是真正的答案,但看起来您的项目没有达到应有的模块化程度。您不必每次都从头开始构建整个项目。您构建 jar,在不同的项目中测试它们,然后用作单个项目。每个项目应该足够小并且只覆盖一个区域。您认为 Java 在 io 包上工作时会构建安全 jar 吗?分而治之——这就是 OOP 和封装的全部思想。