从外部打电话给sbt

时间:2014-02-03 16:49:35

标签: scala sbt

我正在设计一个工具,它将sbt项目路径作为参数。我希望能够动态构建该项目,并能够获得其类路径。

我之前将我的工具设计为sbt插件来实现这一点,但它不够灵活,我的目的:我不想在我正在研究的项目的sbt配置文件中参数。

我想在外部使用sbt,构建一个项目(从sbt目录路径)并在我的scala代码中外部编译它,而不在控制台中调用sbt。这是在控制台中给定目录中键入“sbt”时会发生什么情况的代码再现。有没有直接的方法来实现这个目标?

2 个答案:

答案 0 :(得分:2)

我认为您需要查看SBT jar文件和源代码。找到“Main”类并以编程方式调用它。代码在这里:https://github.com/sbt/sbt。主要类是:xsbt.boot.Boot。我通过解压缩并查看META-INF/MANIFEST.MF从sbt jar文件中获取它。因此,您可以看到SBT如何将命令行参数传递给它并从那里获取它。以下是Boot类,以防万一:https://github.com/sbt/sbt/blob/0.13/launch/src/main/scala/xsbt/boot/Boot.scala。玩得开心! :)

P.S。在您的代码中,只需致电Boot.main(<your sbt commands>)

答案 1 :(得分:0)

我有一个模糊的相似要求。我生成一个命令行工具作为我项目的可交付成果之一。该脚本启动Scala运行时本身,自然需要项目依赖项的有效类路径。为了以外部形式获取,我使用SBT-Start-Script插件。虽然该插件确实产生了一个实际的启动器,但我需要做的比它提供的更多,所以我只是用它来外化项目的(当前)类路径,我将其提取到一个单独的源文件中的shell数组初始化中。可能是source - 由主启动器脚本编写。