gpt4 book ai didi

sbt - 使用 SBT,我如何指定一个替代项目根而不是当前目录来运行主类?

转载 作者:行者123 更新时间:2023-12-04 14:11:30 32 4
gpt4 key购买 nike

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

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

最佳答案

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

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

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

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

这允许创建具有多个定义的单个项目。这适用于嵌套/分层项目。但我对分层项目使用符号链接(symbolic link)(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 wrapper 并且在每个 SBT 项目中都有指向这个的符号链接(symbolic link):

#!/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在你的情况下。

关于sbt - 使用 SBT,我如何指定一个替代项目根而不是当前目录来运行主类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16600119/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com