Библиотека NetBeans с использованием JNI - PullRequest
8 голосов
/ 13 января 2009

Можно ли определить библиотеку, которая использует JNI в NetBeans?

Кажется, что определение библиотеки допускает только файлы Jar или папки.

Как я могу убедиться, что DLL соблюдает файл jar при сборке приложения?

Ответы [ 3 ]

6 голосов
/ 06 января 2010

Предполагая, что вы имеете в виду создание приложения (или модуля) платформы NetBeans, вы можете поместить DLL в папку "release / modules / lib /". Это в соответствии с платформой FAQ:

Дополнительная информация здесь:

Если вы спрашиваете более широко, то я думаю, что большинство людей упаковывают DLL в jar, а затем извлекают ее во временную папку при запуске приложения. например,

Если это не то, что вы ищете, вам нужно предоставить больше информации о том, что вы пытаетесь сделать.

1 голос
/ 18 августа 2011

Я тестировал следующее решение при использовании NetBeans 7.0.1, и оно работало, но я не знаю, работает ли оно и в ранних версиях.

Решение простое и работает для каждого модуля NetBeans. Поэтому, если у вас есть набор, не помещайте его JNI-файлы в проект пакета, вместо этого поместите нужные вам JNI-файлы в сам модуль. Есть:

  1. Найдите проект модуля NetBeans, в который вы хотите (или нуждаетесь, или думаете) разместить библиотеки JNI (например, с расширениями .DLL, .so и .jnilib);
  2. В Projects щелкните правой кнопкой мыши на узле модуля, выберите в меню Properties;
  3. В диалоговом окне «Свойства проекта» щелкните «Библиотеки и упакованные файлы JAR». Вы должны добавить туда любую внешнюю библиотеку. Я добавил библиотеку фляг RxTX. После добавления внешних библиотек Ant-скрипт Netbeans скопирует все файлы / папки из каталога your_project_dir / release в правильное место при создании решения.
  4. Итак, поместите ваши нативные библиотеки в your_project_dir / release / lib . При желании вы можете создать подкаталоги для каждой целевой платформы, которая вам нужна, например: your_project_dir / release / lib / amd64 , your_project_dir / release / lib / sparc32

    Чтобы узнать больше, прочитайте: http://bits.netbeans.org/dev/javadoc/org-openide-modules/org/openide/modules/doc-files/api.html#jni

    С уважением, marciowb.info

1 голос
/ 11 января 2010

NetBeans не будет делать это самостоятельно, но так как он использует муравей за кулисами, есть обходной путь.

Вы должны создать подкаталог с именем jni в каталоге вашего проекта (c:\path\to\mynetbeansproject\jni), поместить туда все файлы .dll, .so и .jnilib (нативные вещи) и добавить следующие строки в * Файл 1005 *, который вы найдете в каталоге вашего проекта, перед тегом </project>:

<target name="-post-compile">
    <copy todir="${dist.dir}/lib">
        <fileset dir="jni" />
    </copy>
</target>

затем добавьте jar-файл в ваш проект, как вы всегда это делаете. :)

фрагмент, который вы вставили в build.xml, обеспечит, чтобы собственные библиотеки следовали вашим jar-файлам в папке dist/lib, когда вы вызываете «Очистить и собрать» из сетевых компонентов (или ant из командной строки); jvm будет искать файлы .dll (.so, .jnilib) в том же каталоге, что и загружаемый файл .jar, поэтому он будет работать.

обратите внимание, что это не заставит ваш проект работать изнутри netbeans, потому что ... я не совсем уверен, что происходит, но похоже, что путь к библиотеке (LD_LIBRARY_PATH) не включает библиотеки ваших проектов, и я не знаю, как изменить его изнутри. просто поместите ваши нативные библиотеки в /Library/Java/Extensions на Mac OS X или просто спрятайте их в c:\windows\system32 под Windows. если вы используете 64-битные окна с 64-битной jvm, я понятия не имею; если вы используете Linux, вы, вероятно, знаете, где их хранить, но /usr/lib/java может быть хорошей идеей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...