2016-03-08 44 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

相關問題