簡體   English   中英

環境變量CLASSPATH <> Clojure的CLASSPATH。 為什么?

[英]Environment variable CLASSPATH <> Clojure's CLASSPATH. Why?

在這里,我檢查環境變量CLASSPATH
daniel @ daniel-laptop:〜/ ps / clojure / projects / ring-tutorial $ echo $ CLASSPATH
/家庭/丹尼爾/ PS / Clojure的/項目/環教程/ src目錄

在這里,我檢查java認為它是什么。
daniel @ daniel-laptop:〜/ ps / clojure / projects / ring-tutorial $ lein repl
Clojure 1.1.0 user =>(System / getProperty“java.class.path”)
“SRC /:類/:/首頁/丹尼爾/ .m2目錄/庫/ leiningen / leiningen / 1.1.0 / leiningen-1.1.0-standalone.jar:LIB / Clojure的-1.1.0.jar:LIB / servlet的API -2.5-6.1.14.jar:LIB /公地-IO-1.4.jar:LIB / CLJ-堆棧跟蹤-0.1.0.jar:LIB / Clojure的-的contrib-1.1.0.jar:LIB /環devel的-0.2 .0.jar:LIB /碼頭-util的-6.1.14.jar:LIB / CLJ-HTML-0.1.0.jar:LIB /環碼頭適配器-0.2.0.jar:LIB /碼頭-6.1.14的.jar:LIB /環形芯-0.2.0.jar:LIB /公地文件上傳-1.2.1.jar:LIB /環servlet的0.2.0.jar:LIB /公地編解碼器-1.4.jar:”

如您所見,這兩種反應完全不同。 我很確定我必須誤解我應該在哪里編輯CLASSPATH變量以使java“得到它”,除了我發現的所有內容都說這應該有效。 那是什么交易? 萊寧根是否會產生自己奇怪的叛徒叛變事件? 我在編輯一個完全不相關的變量嗎? 任何幫助非常感謝。

$CLASSPATH在這里確實完全無關緊要。 如果沒有在命令行上為它提供類路徑信息,那么java -the-JVM-launcher-program將使用它; Leiningen為JVM提供了適合您正在處理的項目的類路徑。

在這種特殊情況下, "/home/.../ring-tutorial/src"對於Ring教程來說不是一個非常有用的類路徑,因為它只包含Ring教程的源代碼而不包含Clojure jar(這是必要的)對於運行Clojure代碼而言,Ring jars(Ring是一個多模塊項目)或Ring依賴的任何其他jar。 Leiningen生成的類路徑可能看起來很長,但它的所有組件都需要存在。

順便說一句,如果你剛剛開始使用Clojure,我建議你堅持使用你的工具鏈的類路徑管理工具(這可能意味着Emacs + lein swank或者某些IDE + Clojure插件),如果可能的話。 否則,關於SO的Clojure類路徑問題有很多問題,還有關於你可以google的主題的大量其他資源......但是現在該工具支持非常強大,你通常不需要觸及類路徑一方面,這只是在開始時最好避免的痛苦。

使用CLASSPATH變量來管理依賴項的問題是,所有Java和其他JVM語言都需要為其目的操作它。 沒過多久你就會在角落里畫自己。

當您啟動僅啟動服務器的服務器時,它會起作用。 它完全打破了Java開發人員的PC,他有10個程序和項目都需要不同的依賴關系,然后花更多時間調試bash腳本來操作編寫源代碼的CLASSPATH變量。

因此,管理類路徑的這種方式已經被廢棄,更喜歡其他類加載技術,或者在使用CLASSPATH時,只在本地使用它。

Clojure類路徑是Java類路徑。

使用-cp參數(Leiningen(和大多數其他Clojure構建腳本))調用java可執行文件時,將忽略$CLASSPATH

如果您使用的是Leiningen之類的構建工具,則必須使用它來管理類路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM