【问题标题】:Getting Leiningen & Cygwin Working让 Leiningen 和 Cygwin 工作
【发布时间】:2014-07-08 14:24:40
【问题描述】:

我正在努力让 Leiningen 和 Cygwin 一起工作。

我认为我遇到的一个问题是我在“C:\Program Files\Java...”目录中安装了 Java。该空间似乎引起了问题。

当我尝试在 Cygwin 中运行 lein 脚本时,出现以下错误:

./lein: line 325: C:\Program Files\Java\jdk1.8.0_05\bin\java.exe : command not found

然后我认为问题出在空间上。所以我将第 325 行从:

"$LEIN_JAVA_CMD" \

到(用于测试目的):

"$'C:\\\Program Files\\\Java\\\jdk1.8.0_05\\\bin\\\java.exe'" \

但是,我仍然收到此错误:

./lein: line 325: $'C:\\Program Files\\Java\\jdk1.8.0_05\\bin\\java.exe' : commande introuvable

但是,这个文件显然存在:

Owner@Owner-PC ~
$ ls -alh $'C:\\Program Files\\Java\\jdk1.8.0_05\\bin\\java.exe'
-rwxr-xr-x 1 Owner None 187K  8 mai   15:39 C:\Program Files\Java\jdk1.8.0_05\bin\java.exe

lein 脚本似乎正在为 Cygwin 正确配置 Leiningen,但我无法让它工作。

请注意,我之前在 Cygwin 之外 安装了 Leiningen(我在 Windows 的普通 shell 中运行它)。

我的设置有什么问题,有什么想法吗?

【问题讨论】:

    标签: clojure cygwin leiningen


    【解决方案1】:

    我通过 Cygwin 使用 Leiningen 没有任何问题。

    重新开始

    从 lein 脚本的新副本重新开始。应该不需要编辑。

    设置您的 PATH 以包含 java

    最简单的解决方案是在~/.profile 中设置路径以包含Java 的bin 目录的路径。然后 Lein 将在路径上找到 java,您将可以在 shell 中访问 java 及其相关工具。

    export JAVA_HOME="/cygdrive/c/Program Files/Java/jdk1.8.0_05/"
    export PATH="${JAVA_HOME}/bin/:${PATH}"
    

    重启你的 shell 或source ~/.profile。验证 which java 是否找到 java 命令。并运行java 以验证您是否获得了帮助输出。

    和/或显式设置 LEIN_JAVA_CMDJAVA_CMD 变量

    或者,在您的~/.profile 中设置 lein 使用的 LEIN_JAVA_CMDJAVA_CMD 变量

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

    重启你的shell或者source ~/.profile

    注意:如果需要,您还可以设置单独的 LEIN_JVM_OPTSJVM_OPTS,但这不是必需的。

    【讨论】:

    • @a-webb 谢谢!我尝试了一些其他操作,例如更改 JAVA_HOME,但只有在我使用相同的值更改 LEIN_JAVA_CMD 变量时它才开始工作:export LEIN_JAVA_CMD="/cygdrive/c/Program Files/Java/jdk1.8.0_05/bin/java.exe"
    • @a-webb:但是现在它看起来并没有为 cygwin 完全“安装”。当我开始 ./lein 时,我得到了可能的参数列表,但是当它开始时,我看到:which: no lein in ([MY-PATH-VAR])。此外,它没有注册,因此我可以从任何地方运行它:lein(免责声明:这是我使用 cygwin 的第一天;))不确定,但我想我错过了一些东西。
    • @Neoasimov 在新的 shell 中尝试使用 PATH 方法(以便 JAVA_CMD 和 LEIN_JAVA_CMD 未设置)。我在编辑之前描述的第二种方法比我想象的要复杂。
    • @Neoasimov 现在修复了第二种方法。您确实需要为该方法设置 LEIN_JAVA_CMDJAVA_CMD 才能启动子流程。
    • LEIN_JAVA_CMD 应该是 shell 可以理解的路径的 Cygwin 版本,JAVA_CMD 应该是 Java 可以理解的 windows 版本。
    【解决方案2】:

    如果您之前在 Windows 上安装了 lein,并希望从 cygwin 访问它,那么请执行以下操作:

    在 cmd 上:

    cd C:/Users/%userprofile%/.lein/bin
    mklink lein lein.bat
    

    在 cygwin 上:

    export CYGWIN=winsymlinks:nativestrict
    

    【讨论】:

      【解决方案3】:

      我感觉到你的痛苦。几年前我自己尝试过这样的事情。 你至少有两个问题。正如您所指出的,一个是让 lein 在 unix 下运行。实际上有两个 lein 脚本 - 一个用于 unix,另一个用于在 windows 下使用的批处理脚本。 你更大的问题是 java.exe - 让 windows java 可执行文件表现为 cygwin shell,特别是在 cygwin shell 中运行的 unix lein 脚本,期望是混乱和脆弱的任务。

      我强烈建议使用支持 Windows(可能是 LightTable)的 clojure ide,或者使用 unix java SDK 安装完整的 linux 虚拟机并在该环境中进行 clojure 开发。在 virtualbox 上运行的 Ubuntu 是免费提供的,我过去曾为此目的使用过一个选项。

      【讨论】:

        【解决方案4】:

        您需要创建一个指向“lein.bat”文件的符号链接。这样才能在 Cygwin 中正确使用它。 打开 CMD 并转到“.lein”路径 (cd %userprofile%\.lein\bin) 并运行:mklink lein lein.bat

        【讨论】:

        • 这导致了lein repl 无法交互的问题(user=> 提示符不接受命令)。如果您运行 lein 脚本的 Linux 版本,则可以正常工作,如 @A 中所述。韦伯的回答。
        【解决方案5】:

        @a-webb 几乎是对的,但还有一些步骤需要完成。首先,你会找到一个名为“.lein”的文件夹,在其中运行 cygwin 中的 lein 脚本,进入,复制文件夹“self-安装”到 C:\Users\yourUserName.lein ,然后,将 C:\Users\yourUserName.lein\bin 添加到环境变量 $Path 中。

        【讨论】:

        • lein命令在cygwin下还是不行,但是在cmd下可以工作
        【解决方案6】:

        我发现最简单的方法是:

        • 通过 windows 二进制文件安装和
        • 将 lein bash 脚本复制到 .lein/bin 中

        那么它应该只在 cygwin 中工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多