2016-03-08 83 views
1

我有一个多模块maven项目,其中一个模块同时拥有java和clojure代码,clojure代码需要一个pojo java源代码和java源代码中的另一个类需要clojure编译代码(我已经添加了:gen-class和项目编译良好,即使它最初发生错误,因为clojure-maven-plugin和编译做clojure时未能看到java class I :编译和编译)。但是这不是从它管理多模块的外部pom开始的。感谢任何寻求解决方案的帮助如何编译一个多模块maven项目,其中一个模块同时具有clojure和java代码

+1

基本上你应该避免Java代码和Clojure代码之间的相互依赖。目前clojure-maven-plugin不能替代java世界和clojure世界之间的编译过程。 – Davyzhu

+1

这似乎是一个非常常见的情况,原来我认为,会有很多解决方案:) – Bijoy

回答

2

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

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

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

基本Java模块将至少包括POJO是Clojure模块需要并可能还有其他常见的东西。 Clojure模块将包含所有Clojure代码,第二个Java模块将包含需要由Clojure编译器生成的类的Java代码部分。只有Clojure模块需要clojure-maven插件。

你可以那么这些模块之间建立依赖关系,使得:

  • Clojure的模块依赖于基本Java假象
  • 第二的Java模块依赖于基本的Java和Clojure的文物

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

+0

是的,这似乎是最好的解决方法,可能是暂时的答案 – Bijoy