Gradle プロジェクトで JNI 開発をセットアップする
IntelliJ IDEA は Gradle の JNI 開発(英語)プロジェクトをサポートします。
このチュートリアルでは、Java 1.8 および Gradle 7.4 バージョンを使用します。チュートリアルではソフトウェアモデル(英語)を使用します。
代替プラグイン(英語)を使用する場合は、JNI サンプル(英語)プロジェクトを確認できます。
JNI サポートを追加するには
build.gradle ファイルを開きます。
次のコードを build.gradle に追加します。
import org.gradle.internal.jvm.Jvm plugins { id 'java' id 'application' id 'c' } mainClassName = 'HelloWorld' repositories { mavenCentral() } dependencies { testImplementation 'junit:junit:4.12' } sourceCompatibility = 1.8 targetCompatibility = 1.8 application { applicationDefaultJvmArgs = ["-Djava.library.path=" + file("${buildDir}/libs/hello/shared").absolutePath] } model { platforms { x64 { architecture "x86_64" } } components { hello(NativeLibrarySpec) { targetPlatform "x64" binaries.all { def jvmHome = Jvm.current().javaHome if (targetPlatform.operatingSystem.macOsX) { cCompiler.args '-I', "${jvmHome}/include" cCompiler.args '-I', "${jvmHome}/include/darwin" cCompiler.args '-mmacosx-version-min=10.4' linker.args '-mmacosx-version-min=10.4' } else if (targetPlatform.operatingSystem.linux) { cCompiler.args '-I', "${jvmHome}/include" cCompiler.args '-I', "${jvmHome}/include/linux" cCompiler.args '-D_FILE_OFFSET_BITS=64' } else if (targetPlatform.operatingSystem.windows) { cCompiler.args "-I${jvmHome}/include" cCompiler.args "-I${jvmHome}/include/win32" } else if (targetPlatform.operatingSystem.freeBSD) { cCompiler.args '-I', "${jvmHome}/include" cCompiler.args '-I', "${jvmHome}/include/freebsd" } } } } } classes.dependsOn 'helloSharedLibrary'import org.gradle.internal.jvm.Jvm plugins { id 'java' id 'application' id 'c' } mainClassName = 'HelloWorld' repositories { mavenCentral() } dependencies { testImplementation 'junit:junit:4.12' } sourceCompatibility = 1.8 targetCompatibility = 1.8 application { applicationDefaultJvmArgs = ["-Djava.library.path=" + file("${buildDir}/libs/hello/shared").absolutePath] } model { platforms { x64 { architecture "x86_64" } } components { hello(NativeLibrarySpec) { targetPlatform "x64" binaries.all { def jvmHome = Jvm.current().javaHome if (targetPlatform.operatingSystem.macOsX) { cCompiler.args '-I', "${jvmHome}/include" cCompiler.args '-I', "${jvmHome}/include/darwin" cCompiler.args '-mmacosx-version-min=10.9' linker.args '-mmacosx-version-min=10.9' linker.args '-stdlib=libc++' } else if (targetPlatform.operatingSystem.linux) { cCompiler.args '-I', "${jvmHome}/include" cCompiler.args '-I', "${jvmHome}/include/linux" cCompiler.args '-D_FILE_OFFSET_BITS=64' } else if (targetPlatform.operatingSystem.windows) { cCompiler.args "-I${jvmHome}/include" cCompiler.args "-I${jvmHome}/include/win32" } else if (targetPlatform.operatingSystem.freeBSD) { cCompiler.args '-I', "${jvmHome}/include" cCompiler.args '-I', "${jvmHome}/include/freebsd" } } } } } classes.dependsOn 'helloSharedLibrary'セットアップをスムーズに行うには、次の詳細に注意してください。
IntelliJ IDEA は、Gradle 設定にある Gradle JVM のバージョンを使用します。
OS によっては、コンパイラーパラメーターが異なる場合があります。build.gradle で
cCompiler.args
およびlinker.args
を変更する場合は、そのことに留意してください。アプリケーションが次の既存のシステムプロパティで実行される場合:
application { applicationDefaultJvmArgs = ["-Djava.library.path=" + file("${buildDir}/libs/hello/shared").absolutePath] }このアプリケーションは
classes.dependsOn 'helloSharedLibrary'
に依存し、IntelliJ IDEA はプロジェクトツールウィンドウで共有ライブラリのバイナリ libhello.dylib ファイルを生成します。
プロジェクトツールウィンドウで、src | java ディレクトリを選択します。
java ディレクトリを右クリックし、 を選択して、
C
コードを使用する Java クラスHelloWorld
を作成します。作成された
HelloWorld
クラスをエディターで開き、次のコードを入力します。class HelloWorld { public native void print(); static { System.loadLibrary("hello"); } public static void main(String[] args) { new HelloWorld().print(); } }ファイルで指定されたコードは、生成されたシステムライブラリをロードします。
プロジェクトツールウィンドウの src ディレクトリで、
C
プログラム用のファイルである hello/c/hello.c ファイルを作成します。エディターで hello.c ファイルを開き、次のコードを指定します。
#include <jni.h> #include <stdio.h> JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj) { printf("Hello From C++ World!\n"); return; }
この時点で、必要に応じてネイティブコードを使用してさらにアプリケーションを開発することができます。
アプリケーションを実行する
実行構成ダイアログを開きます。
オペレーティングシステムとして macOS を使用している場合は、次のコードを VM オプションフィールドに追加します。
VM オプションフィールドは、オプションを変更リストから追加できます。
変更を保存するには、OK をクリックします。
メインツールバーの をクリックします。
関連ページ:
Gradle
IntelliJ IDEA は Gradle との完全な機能統合をサポートしており、構築プロセスの自動化に役立ちます。新しい Gradle プロジェクトを簡単に作成し、既存のプロジェクトを開いて同期し、リンクされた複数のプロジェクトを同時に操作して管理することができます。Gradle プロジェクトを作成して WSL 環境に保存したり、WSL ファイルシステムから開いたりすることもできます。詳細については、WSL のセクションを参照してください。新規 Gradle プロジェクトを作成する新規プロジェクト...
Gradle 設定
このページを使用して、作成、オープン、またはリンクされた Gradle プロジェクトの設定を構成します。Gradle ユーザーホームこのフィールドを使用して、Gradle のグローバル構成プロパティ、初期化スクリプト、キャッシュ、ログファイルなどを保存する場所を指定します。詳細については、Gradle のドキュメントを参照してください。デフォルトは $USER_HOME/.gradle に設定されています。次のいずれかの方法でオーバーライドできます。環境変数(たとえば、)を設定できます。詳細について...
Java ライブラリを Maven リポジトリに公開する
このチュートリアルの目的は、Gradle プロジェクトで作成された Java ライブラリをローカル Maven リポジトリに公開し、次に IntelliJ IDEA を使用してリモートリポジトリに公開する方法を示すことです。Gradle プロジェクトの作成から始めましょう。新規 Gradle プロジェクトを作成するウェルカム画面で、新しいプロジェクトを選択します。開始点が IntelliJ IDEA ですでに開かれているプロジェクトである場合は、メインメニューのに移動します。開いたページで、Gr...
Ant 入門
Ant プラグインは IntelliJ IDEA にはバンドルされていません。プラグインのインストールの説明に従って、Ant を JetBrains マーケットプレイスからインストールできます。IntelliJ IDEA の最新の互換性のあるバージョンは 2023.2 です。Ant のドキュメントは、以前のバージョンの IntelliJ IDEA ヘルプにあります。Gradle プロジェクトで JNI 開発をセットアップする Gant...