3

尽管似乎有很多与在 Windows 中设置 JAVA_HOME 变量相关的问题和答案,但我并不完全确定我哪里出错了。

我已经按照各种不同的说明设置环境变量,当我在 ruby​​ 中检查环境变量时,我得到了

c:\Ruby192>肋骨
irb(main):001:0> 放置 ENV['JAVA_HOME']
"c:\progra~1\java\jdk1.6.0_20"
=> 无

所以我一直将其解释为设置的环境变量,因为返回了我的 jdk 的路径,但是“nil”是什么?

回显 %JAVA_HOME%

还返回我的 jdk 的路径。

当我跑

宝石安装 rjb

我明白了

extconf.rb:39:in '(main)': JAVA_HOME 不是目录。(运行时错误)

当我查看 extconf.rb 文件时,果然,我得到了

javahome = ENV['JAVA_HOME']
如果javahome.nil?&& RUBY_PLATFORM =~ /darwin/
  javahome = `/usr/libexec/java_home`.strip
结尾
除非javahome.nil?
  如果 javahome[0] == ?" && javahome[-1] == ?"
    javahome = javahome[1..-2]
  结尾
  引发“JAVA_HOME 不是目录。” 除非 File.directory?(javahome)
  pt = Path.new

所以据我所知,nil 意味着没有找到 JAVA_HOME,或者我没有将它指向正确的路径或其他东西。

我已经尝试将 '\bin' 包含在路径的末尾,因为一些回复说这是必要的,但我得到了相同的结果。

有什么建议么?

4

1 回答 1

1

nil 只是 irb 将评估表达式的结果返回给您,即puts .... Puts 打印了您的表达式,但 puts 的返回值为 nil。与内容无关ENV['JAVA_HOME']。Nil 只是意味着 puts 返回了 nil,这是完全正常的。试试看puts "hello",你会看到同样的事情。

如果异常确实来自您的 extconf.rb 粘贴中的行。这意味着File.directory?(javahome)返回false。

我将从在 irb 中使用它开始。即尝试:

File.directory?('c:\progra~1\java\jdk1.6.0_20')

...看看你得到了什么。那条路径看起来很像某种 MSDOS 想要的速记。也许你想用真实的东西代替它C:\Program Files\java\jdk1.6.0_20,看看是否File.directory?()会更快乐。

编辑:

dir %JAVA_HOME%也可以在您的 DOS 提示符下尝试。确保您实际上将您的 JAVA_HOME 指向它应该在的位置。

于 2011-07-07T21:34:58.847 回答