将Java EAR项目从Maven迁移到Bazel?

时间:2018-05-24 12:48:00

标签: java maven bazel

我有一个Java Enterprise应用程序,由多个模块(几个WAR和JAR以及1个Angular5模块)构成并打包成1个瘦 EAR

从功能的角度来看, Maven 项目结构工作正常,一切都模块化,单元测试,集成测试等工作正常。

然而,由于构建速度原因,我正在寻找Maven的替代品, Bazel 不断涌现。

我安装了Bazel并遵循了简单的示例JAR教程,该工作正常。在尝试规范并迁移到Bazel作为POC之前,我有一些问题:

  1. 我是否认为我可以通过Bazel over Maven为这类项目提高显着的构建速度?
  2. 是否有使用Bazel构建WAR模块或EAR模块的示例?
  3. 我的计划是在POMs旁边添加BUILD文件,只要我正在试验。这有什么缺点吗?
  4. Bazel似乎非常强大,因为它让我可以编写任何内容。这也可能是一个缺点,因为在Maven中有很多插件可以解决任何问题。有关脚本或Bazel结构的可维护性的任何想法吗?
  5. 我在Windows而不是Linux上运行(是的......我知道)。与Bazel有关的任何缺点?使用MSYS2,一切似乎都能正常工作。
  6. 谢谢! 我很高兴听到通过为Java Enterprise应用程序实现Bazel的成功案例。

1 个答案:

答案 0 :(得分:1)

免责声明:我是Bazel团队的工程师。

  

我认为我可以获得重要的构建,这是正确的   Bazel over Maven为这类项目提高了速度?

这取决于您当前使用Maven构建的速度,以及构建图的特征。

Redfin公司去年从Maven迁移到Bazel,他们的CI构建速度提高了10倍(40-90分钟到5-6分钟)。 They have documented this migration experience on their blog。今年早些时候,Bazel添加了对remote caching的支持,用户已经报道了这些支持可以进一步加快他们的构建速度。

  

是否有使用Bazel构建WAR模块或EAR模块的示例?

java_war packaging rule in rules_appengine。 Bazel是可扩展的,因此如果特定构建步骤的规则不存在,则可以将其写为rule extension(例如this list of community rules

  

我的计划是在POM旁边添加BUILD文件,只要我这样做   试验。有什么缺点吗?

BUILD / BUILD.bazel个文件不会干扰您的项目,也不会影响您现有的Maven版本。

  

Bazel看起来非常强大,因为它让我可以编写任何内容。这个   也可能是一个缺点,因为在Maven中有很多插件   什么都有。关于脚本或脚本的可维护性的任何想法   Bazel结构?

这是一个非常主观的问题,它取决于你依赖的插件。

您可能遇到的一个迁移步骤是传递外部依赖关系的管理。有一个名为bazel-deps的优秀工具可以帮助您管理它们并自动生成BUILD文件。

Jadep is another tool解析您的Java项目并为它们生成BUILD个文件。有关Jadep的更多信息,请查看this guide

  

我在Windows而不是Linux上运行(是的......我知道)。任何缺点   那个与Bazel有关的?一切似乎都很好,也很快   与MSYS2。

Bazel是Windows原生二进制文件,不依赖于MSYS2运行时,除非您使用依赖于bash的规则,例如sh_library。查看此博客文章了解更多信息:https://blog.bazel.build/2017/10/16/windows-retrospect.html