web-dev-qa-db-ja.com

OS XLionにJavaネイティブ開発ヘッダーをインストールする方法

JNIプロジェクトをビルドしようとしていますが、JNIヘッダーが見つからないようです(例:jni.h)。 https://developer.Apple.com/downloads/ から「Javafor Mac OS X10.7DeveloperPackage」をインストールしました。

さまざまなオンラインリソースで、ヘッダーは/System/Library/Frameworks/JavaVM.framework/Headers/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/includeなどの場所に配置する必要があると示唆されていますが、どこにも見つかりません。インストーラーがヘッダーを作成していないようです。

他のJDKコンポーネント(たとえば、/System/Library/Frameworks/JavaVM.framework/Commands/javah)は表示されますが、JNIヘッダーは表示されません。助言がありますか?


更新:technomageは、AppleがJDKを/Library/Java/JavaVirtualMachinesの下にインストールし、JNIヘッダーが/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/include/jni.hにあることを指摘しました。

しかし、私はまだ実際の目標に固執しています。それは、LevelDBのJNIラッパーを構築することです(github.com/fusesource/leveldbjniの指示に従って)。 Mavenを適切なJDKに向けるために、PATHの前に/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/binを追加し、Java_HOMEを/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Homeに設定しました。しばらくチャグした後、Mavenは次のように失敗します。

[INFO] --- maven-hawtjni-plugin:1.5:build (default) @ leveldbjni-osx ---  
[INFO] Extracting /Users/steve/leveldb/leveldbjni/leveldbjni/target/leveldbjni-99-master-SNAPSHOT-native-src.Zip to /Users/steve/leveldb/leveldbjni/leveldbjni-osx/target/native-build-extracted  
[INFO] executing: /bin/sh -c ./configure --disable-ccache --prefix=/Users/steve/leveldb/leveldbjni/leveldbjni-osx/target/native-build/target --with-leveldb=/Users/steve/leveldb/leveldb --with-snappy=/Users/steve/leveldb/snappy-1.0.3 --with-universal --with-leveldb=/Users/steve/leveldb/leveldb --with-snappy=/Users/steve/leveldb/snappy-1.0.3  
...  
[INFO] configure: Java_HOME was set, checking to see if it's a JDK we can use...  
[INFO] checking if '/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home' is a JDK... no  
[INFO] configure: javac was on your path, checking to see if it's part of a JDK we can use...  
[INFO] checking if '/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home' is a JDK... no  
[INFO] configure: Taking a guess as to where your OS installs the JDK by default...  
[INFO] checking if '/System/Library/Frameworks/JavaVM.framework' is a JDK... no  
[INFO] configure: error: JDK not found. Please use the --with-jni-jdk option

「使用できるJDK」を識別するためにMavenが何を見ているのかはっきりとはわかりませんか?いくつか掘り下げてみると、 http://www.arm4.org/trac/browser/branches/architecture/m4/jni.m4 いくつかの場所でjni.hを探して、試してみるように見えます。コンパイルしますが、このjni.m4に実際の関係Mavenがあるかどうかはわかりません。 /Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/include/にjni.hがあります。

20
Steve

私はこれが古いスレッドであることを知っていますが、今日(3/14後半)最新のものを取得するために私がしたことは、Ruby Javaヘッダー。やり過ぎですが、すべてのベースをカバーしていると思います。

  1. Java 8 JDK from http://www.Oracle.com/technetwork/Java/javase/downloads/jdk8-downloads-2133151.html

  2. それをインストールします。

  3. オラクルがそれをどこに置いたかを見てください:

    $/usr/libexec/Java_home
    /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home
    
  4. そこからAppleはそれを置くために使用された場所へのシンボリックリンク:

    $cd /System/Library/Frameworks/JavaVM.framework/Versions
    $Sudo ln -nsf /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents ./CurrentJDK
    
  5. JavaVM.framewrkにHeadersディレクトリを作成するためのシンボリックリンク:

    $cd /System/Library/Frameworks/JavaVM.framework
    $Sudo ln -nsf Versions/CurrentJDK/Home/include/ ./Headers
    

これは私のために物事を修正しました。 Java_HOMEを定義する必要がなかったので、まだ定義する必要はありません。

11
PatchyFog

ヘッダーを取得するには、おそらくJavaドキュメントパッケージをインストールする必要があります。最近のいくつかのリリースでは、それらはJDKパッケージに含まれていません。インストール後、それらは/System/Library/Frameworks/JavaVM.framework/Headersに表示されます。

[編集] AppleJNIヘッダーをJDKdocパッケージにバンドルするために使用されます。これはもはや当てはまりません。 JNIヘッダーshould Java開発者パッケージにバンドルされています。

5
technomage