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

我如何编译一个多模块maven项目,其中一个模块同时具有clojure和java代码,maven,clojure,maven-plugin,clojure-java-interop,Maven,Clojure,Maven Plugin,Clojure Java Interop,我有一个多模块maven项目,其中一个模块同时具有java和clojure代码,clojure代码需要来自java源代码的pojo,java源代码中的另一个类需要clojure编译的代码(我添加了:gen类和project编译得很好,尽管它最初给出了一个错误,即当clojure-maven插件和编译器执行clojure:compile和compile时,未能看到java类I)。但这在管理多模块的外部pom中不起作用。感谢您在寻找解决方案方面提供的任何帮助。正如其中一条评论所说,clojure m

我有一个多模块maven项目,其中一个模块同时具有java和clojure代码,clojure代码需要来自java源代码的pojo,java源代码中的另一个类需要clojure编译的代码(我添加了:gen类和project编译得很好,尽管它最初给出了一个错误,即当clojure-maven插件和编译器执行clojure:compile和compile时,未能看到java类I)。但这在管理多模块的外部pom中不起作用。感谢您在寻找解决方案方面提供的任何帮助。

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

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

  • 基本Java模块
  • Clojure模块
  • 第二Java模块
基本Java模块将至少包括Clojure模块需要的POJO以及其他可能的常见内容。Clojure模块将包含所有Clojure代码,第二个Java模块将包含需要Clojure编译器生成的类的Java代码部分。只有Clojure模块需要Clojure mav插件

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

  • Clojure模块依赖于基础Java构件
  • 第二个Java模块依赖于基础Java和Clojure人工制品

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

基本上你应该避免Java代码和Clojure代码之间的相互依赖。目前Clojure maven插件无法在Java世界和Clojure世界之间交替编译过程。这似乎是一个非常常见的场景,最初我认为会有很多解决方案:)是的,这似乎是最好的解决办法,也可能是目前的答案