2015-06-10 3 views
0

Я работаю над проектом Scala, который использует код C++, используя sbt. После компиляции этот код C++ импортируется в Scala через Java-код, который использует jna.Как использовать jnaerator в проекте sbt

Теперь, в настоящее время оболочка Java написана вручную, и мне нравится автоматизировать это. Я нашел jnaerator, который может это сделать, но я не знаю, как использовать его в sbt.

Я вижу два общих подхода:

  1. использование командной строки, такие как java -jar jnaerator ..., но я не знаю, как настроить такие команды задачу строки в SBT? Кроме того, мне нужно будет знать типичную структуру проекта: где вывести код, созданный jna?
  2. Используйте jnaerator maven плагин через sbt, если это возможно?

ответ

1

Это может занять некоторую итерацию, пока мы не сделаем все, что вам нужно.

Для первого подхода, вот как вы можете запускать пользовательскую системную команду на sbt (вы, по сути, решаете это с помощью кода Scala). Добавьте следующее в файл build.sbt:

lazy val runJnaerator= taskKey[Unit]("This task generates libraries from native code") 

runJnaerator := { 
    import sys.process._ 
    Seq("java" , "-jar", "jnaerator", "...").! 
} 

Для выполнения:

>sbt runJnaerator 

Теперь вопрос, где вам нужно эти файлы файлы идти? Наконец, как вы хотите все вызывать?

+0

tx, я буду использовать это и сгенерировать java-файл в директории src/main/java. Собственно, я видел, что jnaerate может создать банку. Вполне может быть хорошей идеей, чтобы посмотреть, могу ли я сделать вывод вывода sbt (подпроекта), содержащего мой код cpp. Это можно затем использовать в качестве моего проекта java + scala. –

+0

Оба решения звучат довольно хорошо! Кстати, SBT имеет довольно приятный рабочий процесс для генераторов кода. Взгляните [здесь] (http://www.scala-sbt.org/0.13/docs/Howto-Generating-Files.html). Дайте мне знать, если вам нужна помощь. Вы можете заставить свою задачу 'compile' генерировать все источники для вас (нет необходимости вызывать отдельные задачи). – marios

Смежные вопросы