Maven与Cygwin - 错误:JAVA_HOME定义不正确

11

我正在尝试在cygwin上运行Maven。我已经将maven添加到路径中,我的Java home看起来像这样:

$ echo $JAVA_HOME 
/cygdrive/c/Program Files/Java/jdk1.6.0

然而当我尝试运行 mvn --version 命令时,出现以下错误:

Error: JAVA_HOME is not defined correctly.
  We cannot execute /cygdrive/c/Program Files/Java/jdk1.7.0_01/bin/java
任何想法为什么它不起作用?Java -version正常工作,所以这不是Java的问题。我也尝试了jdk1.6.0。
运行which java会得到:
$ which java
/cygdrive/c/windows/system32/java

执行java -version命令的输出结果:

$ java -version
java version "1.7.0_01"
Java(TM) SE Runtime Environment (build 1.7.0_01-b08)
Java HotSpot(TM) Client VM (build 21.1-b02, mixed mode, sharing)

1
你需要用 \ 转义 Program Files 中的空格吗?我从来不会将任何与开发相关的东西安装到 Program Files 中,只是因为那个愚蠢的空格。 - digitaljoel
我已经转义了它,但仍然出现相同的错误。我也不喜欢 Program Files 中间的空格,但我不想因为 cygwin 的缘故改变使用 Windows 的方式。 - gsgx
which java 会打印什么?java -version 呢? - jtahlborn
@jtahlborn 我已将输出添加到问题中。 - gsgx
您可以在Cygwin环境中尝试以下操作:export JAVA_HOME='/cygdrive/c/Program Files/Java/jdk1.6.0' 或者 set JAVA_HOME='/cygdrive/c/Program Files/Java/jdk1.6.0'。由于路径中存在空格,因此需要使用引号。 - ee.
显示剩余4条评论
5个回答

17
如果我运行mvn.bat而不是mvn,就不会有这个问题。
因此,由于Cygwin将运行mvn文件,我用软链接替换了这个mvn文件(ln -s mvn.bat mvn)到批处理文件。这样,运行mvn将静默地运行优雅处理这些问题的mvn.bat

我曾经遇到过同样的问题,我试图从cygwin运行ant。JAVA_HOME路径肯定是正确的,但是运行ant.bat而不是ant确实解决了我的问题。 - Ruan Mendes
我在Gradle上遇到了同样的问题:我想从Gradle中启动一个maven构建,但是当'mvn'在gradle脚本内部执行时,JAVA_HOME突然被“更正”为/cygdrive/-path(而不是在调用gradle时的C:..-path),因此显然在dos空间中运行的maven invoker找不到java。有人知道是谁改变了JAVA_HOME吗?!似乎这是唯一受到这种处理的环境变量。(这似乎与子进程的'cmd /c'风格调用有关)。 - stolsvik

10

如果你正在使用Cygwin和Maven,这是你需要的确切步骤:

在你的Cygwin bash提示符下执行以下操作:

$ vim ~/.bashrc

或者:

$ nano ~/.bashrc

(无论你喜欢哪个...)

追加以下内容:

alias mvn=mvn.bat

保存并退出。然后运行:

$ source ~/.bashrc

现在你应该能够像在命令提示符中一样使用mvn命令。


这个很好用,只需使用alias mvn=mvn.cmd - Vince

4

Cygwin使用DOS控制台来执行Maven构建(mvn.bat)。

将Java home设置为C:\Program Files\Java\jdk1.7.0_01位置。


实际上,这是解决问题最正确的方式。所有Cygwin工具都能理解Windows风格的JAVA_HOME,但反之则不行。 - Sergey Grinev
它适用于我的硬盘,但对于闪存驱动器却不起作用。使用mvn.bat在这两种情况下都有效,我不知道为什么会这样! - binit

0

JAVA_HOME设置为/cygdrive/c/Progra~1/Java/jdk1.6.0可能会有所帮助。


0

我在使用cygwin工具运行gradle时遇到了同样的问题。

我曾经设置过包括bin文件夹在内的Java home:

C:\Program Files\Java\jdk1.7.0_67\bin

但后来我意识到有些应用程序不会识别如果你包括bin文件夹,所以我把类路径改成了C:\Program Files\Java\jdk1.7.0_67,然后它开始工作了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接