0

我有一个带有子模块的顶级 Maven 项目。第一个子模块是一个 Java 项目,它从编译器的注释处理器生成一些 JavaScript 库代码。我想将这些生成的 JS 文件包含到第二个子模块中,一个 webpack NPM 托管项目,用于构建,然后将 webpack BACK 发布到第一个子模块中,然后再打包到 fat-jar 中。有谁知道实现这一目标的方法?

4

1 回答 1

1

您描述的是循环依赖。你必须打破这种循环依赖。(您可能一直在代码中做类似的事情。)

我通过分解 Java 项目解决了同样的问题。一旦你这样做了,你就会意识到,事实上,你的第一个项目是服务于两个不同的角色,然后它们变得分开:

从:

  1. 带有代码和程序集的 Java 项目
  2. JavaScript 项目

至:

  1. 带代码的 Java 项目
  2. JavaScript 项目
  3. 带有组件的 JAR 打包项目

我经常看到这种情况发生在构建到 WAR 文件中的多模块项目中,并且我采用了 WAR 项目不应该有任何 Java(生产)代码的经验法则,承认它作为聚合器/汇编器的角色.

有些人会认为这第三个项目是轻浮的,有些人总是认为你很容易获得太多的 Maven 模块。我认为这通常源于工具或构建管道的限制,一旦你突破了这些限制,你可以拥抱越来越多的 Maven 模块,因为边界选择得很好,我认为这里没有问题。

不过有一个犹豫:为什么 JavaScript 项目一开始是分开的?如果它没有单独部署(显然不是因为您正在组装“fat-jar”),JavaScript 代码将遵循“fat-jar”的交付生命周期,这将受益于同一源存储库,那么为什么还要让它成为一个单独的 Maven 模块呢?(如果它们位于单独的源存储库中,那么模块之间的版本管理会产生成本,我不确定你是否有理由这样做。)拥有一个单体应用并不可耻(如果做得好——它发生了,微服务会让你相信否则,但在那个世界里,无论如何你可能会单独部署 JavaScript 代码)。

于 2017-08-02T05:22:16.317 回答