ENargit
@ENargit

Как организовать сборку проекта на Java но с кусками нативного кода?

Добрый день!


Занимаюсь сейчас своим опен-сорс проектом Octclipse (плагин к Eclipse IDE для Octave), но сообщества пока нет, так что задам вопрос здесь.


Суть проблемы:

Есть проект, в основном написанный на Java, но для некоторых важных фич (консоль, дебаг, графики) требующий С++-кода. Проект я хочу поддерживать на разных платформах(Linux, Window, Mac) и архитектурах(32,64). Также хочется иметь поддержку разных версий Octave(на данный момент — 3.2.4, 3.4.3, 3.6.0). Итого для каждой комбинации получается туча библиотек, собирать которые очень неудобно.


Вопрос:

Есть ли у вас какие-нибудь идеи, как это организовать без излишних сложностей? Ниже я приведу варианты, о которых я думал — хотелось бы услышать и их оценку. Мне важен не столько технический аспект, сколько архитектурный.


Доп. информация:

0. Нативный код не простой, а оформляется в виде плагинов к октейву(по-моему, необходимо это только в случае с графиками). Значит, собирается он не GCC, а октейвовской командой mkoctfile.

1. Сейчас нативный код собирается с помощью AutoTools и только в Linux.

2. Java-код собирается с помощью Maven 3 и Tycho (это всё же плагин к эклипсу)


Варианты (и моё к ним отношение):

— даём пользователям код, просим собрать перед использованием (отпугнет половину пользователей)

— немного извращаемся, таскаем код вместе с плагином, при первом запуске плагина пытаемся вызвать mkoctfile и собрать нужные подпроекты (тяжело, но, вроде, реализуемо)

— отдельно собирать и предлагать доп. пакеты для каждой платформы, версии и дистрибутива(очень трудоёмко в поддержке и некрасиво)

— собирать нативные подпроекты и складывать их в эклипсовские фрагменты (соответственно, пользователи сразу будут получать готовую к употреблению среду, но придется сохранять скомпилированные пакеты в репозитории)


Был ли у кого-нибудь опыт по поддержке чего-то подобного? Посоветуйте, пожалуйста, как быть?
  • Вопрос задан
  • 3277 просмотров
Пригласить эксперта
Ответы на вопрос 3
Monnoroch
@Monnoroch
Для разных версий ОС и разной архитектуры машины все равно придется распространять разные дистрибутивы.
Так что остаются только разные версии eclipse и octave. Тут можно просто собрать все варианты и запихнуть в инсталлятор, а при установке детектировать (или спрашивать) необходимые версии ПО и соответственно устанавливать ту, которая подойдет.
Ответ написан
ENargit
@ENargit Автор вопроса
Приемлемое решение найдено. Как писал в комментарии выше, решил использовать плагин duns.github.com/maven-nar-plugin. Стоит отметить, что он сыроват, и по-моему, уже ко всему прочему мертв(последний коммит в 2010 году). Но в какой-то мере своё предназначение выполняет. Мне только пришлось перековырять его код и добавить возможность различать пакеты не только по связке AOL(Architecture,OS,Linker), а еще и по дополнительным классификаторам, в которые я теперь пишу версию Octave.
Думаю, когда всё это реализую, можно будет и статейку написать. Хотя, конечно, спектр применимости у NAR-плагина весьма узкий.
Ответ написан
Комментировать
Ganesh
@Ganesh
Попробуйте gradle вместо maven, он более гибок и подходит для сборки не только JAVA приложений.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы