如何编译多模块maven项目,其中模块同时包含clojure和java代码

时间:2016-03-08 04:48:27

标签: maven clojure maven-plugin clojure-java-interop

我是一个多模块maven项目,其中一个模块同时具有java和clojure代码,clojure代码需要来自java源代码的pojo,而java源代码中的另一个类需要clojure编译代码(I' ve补充说:gen-class和project编译很好,即使它最初给出了一个错误,因为当clojure-maven-plugin和编译做一个clojure时编译和编译时看不到java类我。但这并不适用于管理多模块的外部pom。感谢您寻求解决方案的任何帮助

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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

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