【问题标题】:How to use jnaerator in a sbt project如何在 sbt 项目中使用 jnaerator
【发布时间】:2015-06-10 23:39:36
【问题描述】:

我使用 sbt 处理使用 c++ 代码的 Scala 项目。编译后,此 c++ 代码通过使用 jna 的 Java 代码导入 Scala。

现在,Java 包装器目前是手动编写的,我喜欢将其自动化。我找到了可以做到这一点的 jnaerator,但我不知道我应该如何在 sbt 中使用它。

我看到了两种通用方法:

  1. 使用命令行,例如java -jar jnaerator ...,但我不知道如何在sbt中设置这样的命令行任务?另外,我需要知道要遵循的典型项目结构:在哪里输出 jna 生成的代码?
  2. 如果可能,通过 sbt 使用 jnaerator maven 插件?

【问题讨论】:

    标签: java c++ maven sbt jnaerator


    【解决方案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
    

    现在的问题是您需要将这些文件放在哪里?最后,你想如何调用一切?

    【讨论】:

    • tx,我现在将使用它并在 src/main/java 目录中生成 java 文件。实际上,我看到 jnaerate 可以生成一个 jar。 In 可能是一个好主意,看看我是否可以将包含我的 cpp 代码的 sbt(子项目)输出。然后可以将其用作我的 java+scala 项目的一个 dep。
    • 两种解决方案听起来都不错!顺便说一句,SBT 有一个非常好的代码生成器工作流程。看看here。如果您需要任何帮助,请告诉我。您几乎可以让您的 compile 任务为您生成所有源(无需调用单独的任务)。
    猜你喜欢
    • 2013-12-29
    • 2017-08-19
    • 2015-11-23
    • 1970-01-01
    • 2012-07-24
    • 2016-10-21
    • 2020-01-03
    • 2015-07-20
    • 2015-08-03
    相关资源
    最近更新 更多