maven-nar-plugin vs native-maven-plugin, что лучше?

Я собираюсь создать проект Java, который использует JNI. Я хочу развернуть проект как отдельное приложение, но некоторые модули могут также использоваться в качестве библиотек других приложений. Я хочу поддерживать разные платформы, и все должно быть максимально безболезненно.

Насколько я вижу, у меня есть выбор между maven-nar-plugin, который не обновлялся уже полтора года, и native-maven-plugin, который мне кажется менее удобным для пользователя.

У вас есть опыт работы с одним из них или рекомендации, которые я должен использовать?

3 ответа

Решение

Я использовал только плагин maven-nar-plugin для автономных приложений C/C++, но для этого он работал очень хорошо.

Что касается JNI, я уже несколько лет использую native-maven-plugin в значительном приложении. Мы используем его, чтобы наши Java-приложения могли взаимодействовать с другими приложениями, которые предлагают только API C. Я на самом деле нашел это довольно удобным для пользователя. Документация довольно хорошая и объясняет базовое использование, но вам все равно придется иметь дело с компилятором C и компоновщиком и любыми опциями, которые требуются для сборки.

Мы просто передаем ему команды и параметры компилятора и компоновщика, местоположение источника и расположение файла javah, и это работает. Я должен сказать, что со всей болью, которую мы пережили с JNI, плагин Maven - одна из немногих вещей, которая не была большой проблемой.

На третьем слайде этой презентации о плагине NAR Марка Донзельманна из Стэнфордского центра линейных ускорителей сравниваются плагин native-maven и плагин maven-nar-plugin. Цитируя слайд 3, плюсы и минусы native-maven-plugin:

Pros

  • Очень настраиваемый

Cons

  • Не вышли из коробки (по умолчанию нет)
  • Нет бинарных зависимостей
  • Не кроссплатформенный (разные профили для разных платформ)

С одного года я использовал много native-maven-plugin для кросс-компиляции исходного кода на C и C++ (с профилем для каждой опции платформы, такой как компилятор, опции компилятора, опции компоновщика и т. Д.). Это работает как шарм, но я чувствую себя довольно одиноким в моей ситуации. Теперь я не понимаю, почему разработчик C/C++ все еще использует инструменты make или cmake из другой эпохи. Maven лучше подходит для управления версиями и зависимостями...

Другие вопросы по тегам