如何编译一个多模块 Maven 项目,其中一个模块同时具有 clojure 和 java 代码

How can I compile a multi-module maven project, where a module have both clojure and java code

我有一个多模块 Maven 项目,其中一个模块同时具有 java 和 clojure 代码,clojure 代码需要来自 java 源的 pojo 和另一个 class java 源代码需要 clojure 编译代码(我添加了 :gen-class 并且项目编译得很好,即使它最初给出了一个错误,因为看不到 java class 我什么时候clojure-maven-plugin 和编译执行 clojure:compile 并编译)。但这在管理多模块的外部 pom 中不起作用。感谢任何有关寻找解决方案的帮助

正如其中一条评论所说,clojure-maven-plugin 无法处理同一模块中 Java 和 Clojure 代码之间的循环依赖。 Java 代码在 Clojure 代码之前编译。

但是您可以重构代码以消除循环依赖。将 Java + Clojure 项目(maven 模块)拆分为三个:

  • 基础Java模块
  • Clojure 模块
  • 第二 Java 模块

Base Java 模块至少会包含 Clojure 模块需要的 POJO 以及可能的其他常见内容。 Clojure 模块将包含所有 Clojure 代码,第二个 Java 模块将包含 Java 代码的一部分,该部分代码需要 Clojure 编译器生成的 class。只有 Clojure 模块需要 clojure-maven-plugin。

然后您可以设置这些模块之间的依赖关系,例如:

  • Clojure 模块依赖于 Base Java 工件
  • 第二个 Java 模块依赖于 Base Java 和 Clojure artefacts

只要在 Clojure 模块中正确设置了 AOT 编译,现在应该可以编译所有内容。我相信 clojure-maven-plugin AOT-默认编译所有命名空间。如果没有 AOT 编译,(gen-class) 什么都不做。