【问题标题】:Handling large Java Server project with Maven [closed]使用 Maven 处理大型 Java 服务器项目 [关闭]
【发布时间】:2013-07-11 15:08:08
【问题描述】:

我以前从未从事过 Java Server 开发,我需要构建一个包含大约 10 个库的大型 Server 项目。

该项目已经使用 Maven 进行构建。 我已经设置了构建过程,现在我来到了开发部分。 (需要修改一小部分代码)

问题
我习惯了 5 - 10 秒的构建(不重建整个项目)。我如何使用 maven 实现这一目标?
用例:编写一行代码并进行测试。

如果没有办法用 maven 做,我可以用其他方法吗? 否则每次我需要测试代码时等待 3 - 5 分钟是一件很痛苦的事情。

编辑:
有一百多个链接库(jar),但工作空间中大约有 10 个项目具有依赖关系。 mvn install 大约需要 5 分钟或更长时间。项目中有数千个.java文件和大量资源

【问题讨论】:

  • 你能告诉我除了maven之外你还使用了哪些其他工具?
  • 究竟是什么花了这么长时间?是 Maven 构建还是在应用服务器上部署构建的工件?
  • @jarnbjo 我在问题中添加了更多细节。

标签: java maven build


【解决方案1】:

JRebel 等热部署工具无需重新启动服务器即可完成此任务。否则你需要重新启动它,我认为 10 个库没有问题。

我通常使用 7 或 8,您只需等待服务器重新启动,因为部署是使用 Eclipse+m2e-wtp 自动管理的。如果您将项目划分为多个模块,则此插件负责只编译您想要的内容并进行部署。

【讨论】:

  • 谢谢。我去看看。
  • JRebel 看起来很有趣。谢谢你。我会尝试使用它。
  • 有一个Maven plugin。我从来没有用过,所以我不能谈论它。
【解决方案2】:

最有效的方法不是在本地依赖 Maven,而是让持续集成服务器覆盖您:只对您想要更改(或实施)的代码行运行一个测试。并使用您的 IDE 构建而不是 Maven。

然后提交到一个存储库,该存储库会为每次提交自动触发 Jenkins 构建。然后,所有构建和测试时间(对于完整的测试套件)都在持续集成服务器上消耗,而您已经可以实现下一个功能。只有在测试成功后,集成服务器才会将您的更改推送到祝福的存储库中。

互联网上有大量关于如何使用 Jenkins、Maven、Git 来涵盖此工作流程的教程。

【讨论】:

  • 您确定这是将不工作的代码提交到存储库的好方法吗?我的意思是,在你测试你的代码之前,你不能确定它是否正常工作。如果它不起作用,我仍然会在 5 分钟后知道。应该有另一种方式。也许 JRebel 对我有用。看起来很有趣。
  • 啊,我对设置不是很清楚。如果您使用 git commit 触发的构建,那么您通常至少使用 2 个存储库:开发人员将更改提交到其中的一个。 Jenkins 从该存储库中提取更改,并且仅在成功测试后将它们推送到第二个(“祝福”)存储库。开发人员再次仅从第二个 repo 中提取。因此,运行测试的 CI 服务器只会转发已知不会导致测试失败的更改。
【解决方案3】:

我正在使用适用于 Eclipse 的 JBoss 插件、适用于 Eclipse 的 Maven 插件以及在 Maven 中设置自动部署的 Eclipse 进行 Web 开发。我的全部部署时间约为 1 分钟。如果您想进一步减少,请寻找热部署。

查看Eclipse + Tomcat - Serve webapp directly from workspace

根据我的观察,如果您在一个文件中更改几行,那么 maven 将只编译该文件,但是您必须启动 maven 构建过程。

我认为图书馆的数量应该不是问题。它们只下载一次,然后存储在 .m2 文件夹中。就我而言,它每天早上或首次构建时都会下载,然后下载量很少。我与 10 多个图书馆合作过。

开发环境搭建一次(即安装、配置工具)就可以顺利进行。

【讨论】:

  • 谢谢。我去看看。
【解决方案4】:

如果您的项目被划分为具有父子关系的模块,您可以让 maven 只构建子模块的子集。查看其他 SO 问题的答案:How to maven build child projects?

【讨论】:

    【解决方案5】:

    Welcome 到 J2EE 世界。我可以提出几个 hack-ish 解决方法,不要作为完整的指南:

    1. 首先,硬盘速度很重要,如果你能得到ssd,那 会很好。

    2. FS/OS 很重要。对我来说,在相同的硬件上,ubuntu+ext4 构建比 windows+ntfs 快 30-40%

    3. 像在离线模式下工作(不检查外部依赖项更新)、在主动开发期间禁用测试等黑客行为可能有助于加快速度,但也可能会让你大吃一惊。

    4. 如果您在一个模块中处理一项特定功能,则可以仅构建该模块,然后构建您的 ear 模块以进行部署

    5. 充分发挥 ide 的潜力。使用热插拔。尝试让它部署爆炸的工件,这样你甚至不需要 maven 和创建 jars/wars/ears。 IntelliJ IDEA 是我个人最喜欢的。 Eclipse 也可以。

    6. 禁用防病毒软件(其中一些喜欢检查您创建的每个类文件)。如果您在公司环境中,请让驱魔人为您做这件事

    【讨论】:

      【解决方案6】:

      根据我的经验,构建速度主要受硬件影响,尤其是磁盘驱动器的速度。构建工具并没有真正发挥重要作用。 Maven 应该完全能够处理一个包含 10 个库的项目。

      我当前的项目在其类路径中有大约 92 个 JAR 文件。减去一些仅用于测试目的,减去一些用于构建在多个 JAR 文件中的库,剩下的库超过 10 个。尽管如此,构建只需几秒钟即可完成。测试运行大约需要两分钟(但有一个测试大约需要一半时间。

      【讨论】:

      • 我不是指链接库。有一百多个链接库(jar),但工作区中大约有 10 个项目具有依赖关系。 mvn install 大约需要 5 分钟或更长时间。项目中有数千个 .java 文件和大量资源。
      • 您是否也在运行测试? 10 个项目的测试肯定要花那么长时间,如果你禁用测试,你会发现它非常快
      • 测试被禁用。全新安装时间为 9m 47 秒,mvn install -o 时间为 6m 30 秒
      • 哇,太糟糕了。在公司环境中,我会计算时间损失并要求新硬件。我想说,这是一个投资问题。
      • 同样,在开发过程中无需执行mvn install。有些插件会处理已更改的内容,并且只为您部署更改的 .class 文件本身。单击 Eclipse 的“全部构建”按钮即可完成所有操作,这比完成一个完整的 mvn install 要便宜得多,顺便说一下,它是为生产环境打包项目。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-29
      • 2013-05-03
      • 1970-01-01
      • 2012-07-09
      • 2010-11-27
      相关资源
      最近更新 更多