我的sbt文件中有以下行:
target in Compile in doc := baseDirectory.value / "docs"
这是在目录中创建一个文件夹,比我想要的文件夹低一级。我想得到本质上(伪代码(:
parentDirectory = parent of baseDirectory
target in Compile in doc := parentDirectory.value / "docs"
现在在哪里;docs";位于baseDirectory旁边,而不是在其中
有简单的方法吗?
编辑:项目结构
myFolder/project/build.sbt
如果我运行";docs";在sbtshell中,我得到以下输出:
myFolder/project/docs/
我想要的是:
myFolder/docs/
myFolder/project/build.sbt
我想这样做的原因是,我可以在同一目录中的github页面上托管我的文档。这似乎是不使事情复杂化的最简单方法。
考虑标准的两个连续点..
表示法来表示父目录,例如
Compile / doc / target := baseDirectory.value / ".." / "docs"
或者file("..")
也可以工作
Compile / doc / target := file("../docs")
您可能想要创建一个专用设置来重用
lazy val parentOfBaseDirectory = settingKey[File]("Parent of base directory")
parentOfBaseDirectory := baseDirectory.value / ".."
几个旁注:
您可以使用set
和分号;
在sbt shell中进行快速一次性实验
set Compile/doc/target := baseDirectory.value / ".." / "docs"; doc
/
语法之所以有效,是因为File
被隐式转换为sbt的RichFile
,后者提供了额外有用的扩展方法。
baseDirectory.value
属于java.io.File
类型,因此您可以使用所有这些方法:
https://docs.oracle.com/javase/7/docs/api/java/io/File.html
这里相关的是getParentFile
。