2012-09-23 16 views
8

我對Clojure提及Maven的文章/博客/問題/回答的數量感到有點驚訝。在大約十年的時間裏,作爲一名Java開發人員,在桌面應用程序和webapps上工作,我從未使用Maven一次(通常 - 這是個人意見,但我知道有些人也會這麼想 - 我看過使用Maven的項目,其中包括「廚房水槽」,而那些用更「控制」的構建過程構建的過程更「清潔」,生產更小的罐子,更快的構建時間等)。Maven是否對JVM上的Clojure強制要求?

是否需要Maven構建Clojure應用程序?

Maven是否必須使用Leiningen?例如,我可以在不需要Maven的情況下將外部jar添加爲leiningen項目的「手動」依賴項嗎?

我認爲我的問題歸結爲:你可以在Clojure/JVM世界中不使用Maven,就像你可以構建,測試,打包和發佈Java桌面,webapps和Android應用程序一樣需要Maven?

回答

14

簡短的回答:沒有.Clojure只是一個jar,你可以像任何其他Java庫一樣使用它作爲「raw」。

更長的回答:Maven不是必需品,但是圍繞Clojure的工具,特別是Leiningen,與Maven高度一致,所以如果你只是服從Maven的意志,你的生活會更容易。但是,通過一點工作,沒有Maven就不難相處。在工作中,我使用了Leiningen和我們現有的基於Ant/Ivy的構建基礎結構。我使用Ant來解決依賴關係(來自我們策劃的內部回購),然後使用Leiningen的:resource-paths攻擊來獲取非Maven罐子。在某些時候,我會做一個真正的插件來做這件事,但到目前爲止,它對我來說工作得很好。另外,如果您是Eclipse人員並使用CounterClockwise,則可以像處理Eclipse中的任何其他Java項目一樣對待您的項目,從而手動管理類路徑。只是碰巧你還有一些Clojure代碼。

當然,這兩種方法的缺點是,如果您想要獲取Maven central或Clojars提供的某些內容,您必須爲您的基礎架構設置某種鏡像,或者手動下拉傳遞依賴性並將它們添加到您的項目中。

+3

Leiningen在引擎蓋下使用maven,大多數時候你不必知道或關心它在那裏。 – Bill

+0

是的,但它假設文物是在maven回購。 –

+0

這就是我大部分時間說的原因。 :-)另外,順便說一句,有一個upvote。 – Bill

6

對於這個問題,您不必使用maven或leiningen。你可以運行clojure REPL

java -jar clojure-1.3.0.jar 

它會工作得很好。我知道你從哪裏來,因爲一年前,我和你一樣在同一條船上。從來沒有使用過maven,看過一些不太好的項目,使用它很差,並且一般不信任maven。螞蟻+常春藤很好,誰需要maven?

由於使用了leiningen,並開始了一個新的工作,我們有一個很好的設置maven配置,我已經完全改變了我的調子;我現在認爲maven是偉大的,並且更喜歡它對螞蟻,我已經使用了很長時間。

具體使用Clojure,leiningen的一些優點是:

  • AUTOMAGIC工程腳手架:「雷音新的」建立一個新的項目給你。約定很重要,它可以幫助其他開發人員瞭解您的項目並迅速提高。
  • 依賴和插件管理。增加一個依賴關係是微不足道的,並且我沒有一個很好的方式來執行與clojure緊密集成的非Maven依賴關係管理。
  • 「lein repl」正確設置了你的類路徑和所有內容,所以你不需要用它來欺騙,你可以啓動並運行一個REPL。
  • 工件創建:建立一個胖罐子(lein uberjar)非常簡單,並且已經爲您設置。

因此,儘管在沒有leiningen的情況下使用clojure是絕對有可能的,但我真的不明白爲什麼你會想要。在我看來,日常開發中有太多好處,不能使用它。

4

關於「Maven是否必須使用Leiningen?」

leiningen使用和包裝Maven的,所以你不能真正避免它,但你永遠不要需要觸及任何XML

4

Maven是不是強制性的Clojure的,正如其他人正確地指出。

不過,我想鼓勵你擁抱Maven(直接或通過leiningen)。它在世界上的Clojure一些大的優勢:

  • 你會從長遠來看更高效 - 一旦你得到了它成立,這是相當令人印象深刻看到一個複雜的構建,測試和部署在一個命令中執行。你真的想手動設置類路徑,下載依賴項,增加版本號,上傳到FTP站點等?
  • 在JVM上使用Clojure的最大優勢之一是訪問Java庫生態系統。 Maven是自動管理Java庫依賴關係的首選工具。幾乎所有你可能需要的東西都在Maven Central或Clojars倉庫中。
  • Clojure傾向於有小型聚焦庫 - 這很好,因爲它們很「簡單」,您可以挑選您喜歡的功能。同時,這也意味着你可能在數量上有更多的庫依賴關係。因此,構建管理系統將變得更加有用。
  • 您可以讓Maven將設爲「精益」,如您所願。顯然,如果你喜歡,你可以在太陽下吸引每一個依賴,但是你也可以通過排除不必要的垃圾來創建非常精巧的罐子。這是你的選擇。
  • 它是Clojure世界中事實上的標準。如果沒有別的,使用它意味着你將能夠更容易地與其他人合作

P.S.像你一樣,5年前我並沒有真正看到Maven的觀點。然後我放棄了它,看到了我的工作流程可能會有多強大。現在我是一個轉換:-)

相關問題