2008-08-18 11 views
5

プラットフォーム固有のC/C++コードからJavaへのファイルシステム変更通知を提供するためにJNI(Java Native Interface)の世界に初めて出張しようとしています。それは誰かが私が逃したこれを行うためのいくつかの華麗な図書館を示唆しない限りです。JNIとJava:antはmakeを呼び出しますか、antを呼び出しますか?

JNIの新機能私はJNIのインターフェイス側とライブラリ生成側で多くのドキュメンテーションを見つけることができましたが、ネイティブライブラリを構築することはあまりありませんでした。

既存のJavaソースのantベースのビルドがあるので、makeを呼び出してmakeを呼び出してライブラリを作成する必要があるかどうか、またはmakeを得るのが最善の場合ライブラリを作成した後にantを呼び出しますか?

どちらのオプションも素晴らしいとは言えませんが、どちらもantを使ってコードをコンパイルしてライブラリを直接生成するようにしようとしています。

答えて

3

私は暗黙のルールセットと空白の扱いのためにmakeを嫌っています。個人的に私はCコンパイルを行うためにcppタスク(http://ant-contrib.sourceforge.net/cpptasks/index.html)を使用します。彼らはmakeほど柔軟ではありませんが、それほど複雑ではなく、学習者に開発者を負担させる必要はありません。

+0

CPPタスクは、私が感謝の必要なものに対して素晴らしい仕事をしてくれました。クロスコンパイルを行う必要がありましたが、cpptasksのバックエンドに使用するクラスを指定できるようになりました。 –

3

JNIの簡単な代替手段として、JNA:https://jna.dev.java.net/を試してみてください。あなたにとってこの面倒を解決し、より簡単になるかもしれません。

+0

JNAは私が望んだことをするうまい方法でしたが、悲しいことに、新しいウィンドウクラスを作成して関数をコールバックしなければならなかったため、JNIを使​​用する必要がありました。 –

1

私は今のところ類似した作業をしています。 swig.orgからのswigの使用は、あなたにとってネイティブライブラリへのスタブを生成するので、しばしばより簡単であることに注意してください。

あなたの質問に対する簡単な答えは、ネイティブライブラリがJavaクラスファイルから生成されたswig生成ヘッダに依存するため、Javaライブラリが既にビルドされた後にantファイルがmakeファイルを実行することです。

あなたがアリに精通していて、新しいシステムを習得したくなければ、別のポスターでリンクされたhttp://ant-contrib.sourceforge.net/cpptasks/index.htmlも、antでC++をビルドできるようになります。

1

私はJNIを完全にスキップし、標準出力に通知を書き込む外部プログラムを使用します。 Javaはプログラム出力ストリームから読み込み、必要なイベントを生成するだけです。あなたが望むのは簡単な通知を送るだけであれば、JNIはあまりにも多くの仕事をしています。

また、Linuxでは「inotifywait」(いくつかの適切なパラメータを使用して、「man inotifywait」を参照)を開始できます。

0

Codemeshでterp C++タスクを試すこともできます。これらは無料ではありませんが、C++コンパイラを発見/指定する機能と、マルチプラットフォームビルドのための複数のコンパイラ/プロセッサアーキテクチャ/コンパイラ構成を反復する機能とを組み合わせて、高度な抽象化を提供します。

関連する問題