3

WindowsでのJAVA_HOME変数の設定に関連する質問と回答がたくさんあるようですが、どこが間違っているのか完全にはわかりません。

私は環境変数の設定に関するさまざまな指示に従いましたが、rubyで環境変数を確認すると次のようになります。

c:\ Ruby192> rib
irb(main):001:0> puts ENV ['JAVA_HOME']
"c:\ progra〜1 \ java \ jdk1.6.0_20"
=>nil

したがって、これを設定されている環境変数として解釈しており、jdkへのパスが返されますが、「nil」とは何ですか?

エコー%JAVA_HOME%

また、jdkへのパスを返します。

私が走るとき

gem install 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でない限り?
  if 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は、返された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 に答える