本人由守望者MS原創
問題分析:
最近在研究Nutch+hadoop。在unbutu server上部署了一套正式的程式,但是由於調試起來不方便,於是在本機上(windows Server 2003)採用cygwin類比方式搭建了一個簡單的Nutch1.2測試環境。
根據配置方案,在cygwin中進行到:
bin/nutch crawl url.txt –dir localweb –depth 2 –topN 100 –threads 2(註:參數可根據需求改寫)命令時,cygwin提示JAVA_HOME not set.
這個提示資訊說明了原生JAVA SDK的環境變數沒有配置。(因為之前在本機一直做JAVA的開發,所以下意識的開啟cmd,輸入javac命令,命令可以執行,這就說明我的環境變數配置沒有問題,但是為什麼在cygwin中提示沒有配置呢,接下來我們繼續檢查問題)。
開啟我的電腦(右鍵)->屬性->進階->環境變數,檢查環境變數。
CLASSPATH:.;C:\Program Files\Java\jdk1.6.0_24\bin(剩下的略去)
發現也沒有問題。
到底是為什麼呢?
之後開啟cygwin,輸入env查看環境變數的類比配置,在PATH中發現重要訊息。
可以看出,cygwin把windows的環境變數全部類比成了自己的模式,而這裡的一些特別的路徑是根據%JAVA_HOME%,%systemroot%之類的目錄配置去解析的。
所以問題的根源在於我前期做JAVA開發的時候,設定環境變數時沒有設定%JAVA_HOME%變數,而是根據網上的一些教程,直接在CLASSPATH和PATH中直接寫入絕對路徑,導致cygwin無法正確的解析。
解決方案:
找到問題所在後,在windows環境變數中增加JAVA_HOME變數,並相應的把原來的絕對路徑中的SDK所在的根目錄路徑換成%JAVA_HOME%,關閉cygwin,重新開啟執行命令,OK,解決問題。
如果還是不行,大家還可以在環境變數中加入NUTCH_JAVA_HOME的變數,值跟JAVA_HOME的一樣。
注意:JAVA_HOME的變數值後千萬不能加分號。