Status Code 303 - See Other

サーバサイド、iOS・アンドロイドアプリ、インフラレベルの話まで幅広くやってます。情報の誤りや指摘・意見などは自由にどうぞ。

Clojure 開発環境を cygwin 上に作る

概要

LISP の流れを組み、Java VM上で動作する関数言語の Clojurecygwin 上で使えるようにする。
少し苦戦したため、それをメモ。

構築で参考にした記事

Windows でも Clojure がしたい! - Qiita

シェルをダウンロード

GitHub - technomancy/leiningen: Automate Clojure projects without setting your hair on fire.
ここにあるシェル(lein script)をダウンロードする。

もし、上記で場所分からなかったら以下をダウンロード。(2016/09/23現在版。古くなっているかも。)
https://raw.githubusercontent.com/technomancy/leiningen/preview/bin/lein
(インストール先)\.lein\bin の中に「lein」って名前で保存。

cygwin 上で起動できない

ここまでやれば起動できるはず!
・・ってことで、下記コマンドを実行してみるが動かない。

$ lein
/cygdrive/p/.lein/bin/lein: 行 364: P:\Java\jdk1.8.0_60\bin\java.exe: コマンドが見つかりません

見つかってないコマンドのパスは、シェルの364行目をみると環境変数「LEIN_JAVA_CMD」で指定されたものらしい。

Javaファイルを認識できていない可能性があるので、

$ java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b15, mixed mode)

・・と、すると lein が java のコマンドを認識できていないってことか。

探してみると、Stack Overflow のページに「普通に自分は動いたよ!」っていう方がいて、
その設定を載せていたので、自分の環境に合わせてコピってみる。
clojure - Getting Leiningen & Cygwin Working - Stack Overflow

JAVA_HOME="/cygdrive/c/Program Files/Java/jdk1.8.0_05/"
LEIN_JAVA_CMD="${JAVA_HOME}/bin/java"
JAVA_CMD=`cygpath -w "${LEIN_JAVA_CMD}"`

上記を適用すると動いた。どうやら cygwin 流のパスを lein が認識できていないようだ。

.bashrc に追加

・・ってことで、~/.bashrc にラッパースクリプト書いて、起動時にのみ動くようにした。
(各自環境と照らし合わせてjavaのバージョン・パスを変更してください)

LEIN_PATH=`which lein`
function lein() {
        local JAVA_HOME="/cygdrive/c/Program Files/Java/jdk1.8.0_60/"
        local LEIN_JAVA_CMD="${JAVA_HOME}/bin/java"
        local JAVA_CMD=`cygpath -w "${LEIN_JAVA_CMD}"`
        "$LEIN_PATH" $@
}