3

./build.sbt通常 SBT 在和处查找构建文件./project/Build.scala。是否可以指定备用项目根目录,以便我可以构建不在当前工作目录中的项目?我基本上在寻找一个等价物,mvn -f /path/to/pom.xml但文档没有为我提供任何明显的答案。

(我应该注意,我想在运行时而不是编译时执行此操作。本质上,我想使用sbt run-main从我的项目中运行任意类,因为我讨厌手动类路径争吵。由于各种无聊的原因,我可能需要从任意执行此操作位置,因为代码可能需要工作目录不是项目目录,所以使用cd可能不会做我想要的。这在 Maven 中是如此微不足道 - 我只是假设,也许不公平,在 SBT 中会有一个简单的等价物)

4

2 回答 2

0

我有这样的东西。我在X/build.sbt, X/MyOtherDefinitionWithSpecialThing/build.sbt,有项目定义X/MySuperPublishConfig/build.sbt

但我对这个问题的看法是相反的。而不是指定位置,./build.sbt./project/Build.scala指定资源路径的位置。结果是一样的。看起来像:

sourceDirectory <<= (baseDirectory) (_ / ".." / "src")

target <<= (baseDirectory) (_ / ".." / "target")

这允许创建具有多个定义的单个项目。这适用于嵌套/分层项目。但我对分层项目使用符号链接(Linux 操作系统)。

我的一个 SBT 插件有一个文件树。多个构建定义,只有一个src/...

.
|-build.sbt
|-project
|---project
|-----target
|-------...
|---target
|-----...
|-project-0.11
|---build.sbt
|---project
|-----project
|-------target
|---------...
|-----target
|-------...
|-project-0.12
|---build.sbt
|---project
|-----project
|-------target
|---------...
|-----target
|-------...
|-...
|-src
|---main
|-----scala
|-------org
|---------...
|---sbt-test
|-----...
|-target
|---...

如果这不能解决您的问题,请详细说明您不想使用“cd”命令的原因;-)

-- 对于更新的用例:

我使用 shell 包装器,并且在每个 SBT 项目中都有指向这个的符号链接:

#!/bin/sh
#
here=$(cd $(dirname "$0"); pwd)
if [ ! -e "${here}/build.sbt" ]
then
  echo build.sbt lost
  exit
fi
cd ${here} 

LOCAL_BUILD=true sbt-0.12 "$@"

我只是写/path/to/my/project/sbt 'show name'例如或/path/to/my/project/sbt run-main在你的情况下。

于 2013-05-26T16:52:17.307 回答
0

正如我从这个其他答案中发现的那样,sbt-start-script插件是一个比sbt run-main. 您可以简单地运行sbt stage并获得一个调用脚本,其中类路径已解析,位于target/start. 根据文档,它需要从构建根目录运行才能使项目间依赖关系工作,但对于我的简单用例,这似乎不是问题。

于 2013-06-13T06:00:05.083 回答