通常,SBT会在./build.sbt
和./project/Build.scala
查找构建文件。是否可以指定备用项目根目录,因此我可以构建一个不在当前工作目录中的项目?我基本上寻找相当于mvn -f /path/to/pom.xml
但是文档没有给我任何明显的答案。
(我应该注意,我想在运行时而不是编译时执行此操作。实际上,我想使用sbt run-main
从我的项目中运行任意类,因为我讨厌手册因为各种无聊的原因,我可能需要从任意位置执行此操作,因为代码可能需要工作目录不是项目目录,因此使用cd
可能无法执行我想要的操作。它是如此微不足道在Maven中 - 我只是假设,也许是不公平的,在SBT中会有一个简单的等价物)
答案 0 :(得分:0)
我有类似的东西。我的项目定义位于X/build.sbt
,X/MyOtherDefinitionWithSpecialThing/build.sbt
,X/MySuperPublishConfig/build.sbt
。
但我对这个问题的看法恰恰相反。我没有指定./build.sbt
和./project/Build.scala
的位置,而是指定资源路径的位置。结果是一样的。它看起来像:
sourceDirectory <<= (baseDirectory) (_ / ".." / "src")
target <<= (baseDirectory) (_ / ".." / "target")
这允许创建具有多个定义的单个项目。这适用于嵌套/分层项目。但我使用符号链接(Linux OS)进行分层项目。
我的一个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
。
答案 1 :(得分:0)
正如我在this other answer中发现的那样,sbt-start-script插件是比sbt run-main
更好的工具。您只需运行sbt stage
,就可以在target/start
获得一个解析类路径的调用脚本。根据文档,它需要从构建根目录运行,以便项目间依赖项工作,但对于我的简单用例,这似乎不是问题。